cpp
От: Marysia Беларусь  
Дата: 10.12.05 18:57
Оценка:
Подскажите, как определить есть ли среди первых трех цифр из дробной части заданного положительного числа цифра 0?? я страдаю (
Re: cpp
От: gbt Россия  
Дата: 11.12.05 06:13
Оценка:
Здравствуйте, Marysia, Вы писали:

M>Подскажите, как определить есть ли среди первых трех цифр из дробной части заданного положительного числа цифра 0?? я страдаю (

#include <set>

using namespace std;

bool containsZero(double number)
{
    // Множество, куда мы положим 3 первые цифры дробной части.
    set<unsigned> digits;
    // Цикл по 3 первым цифрам дробной части.
    for (unsigned i = 0; i < 3; ++i)
    {
        number *= 10;
        unsigned digit = abs(static_cast<int>(floor(number))) % 10;
        digits.insert(digit);
    }
    // Проверяем, содержится ли 0 в множестве 3 первых цифр дробной части.
    return digits.end() != digits.find(0u);
}
Re[2]: cpp
От: gbt Россия  
Дата: 11.12.05 06:39
Оценка:
P.S. Зато человек узнает, что есть такой контейнер set
Правда программировать все равно не научится
Re[2]: cpp
От: Аноним  
Дата: 11.12.05 07:42
Оценка:
Зачем set, если в цикле digit можно проверить на 0. и выйти (return true) не проходя по остальным цифрам...

Здравствуйте, gbt, Вы писали:

gbt>Здравствуйте, Marysia, Вы писали:

gbt> // Множество, куда мы положим 3 первые цифры дробной части.
gbt> set<unsigned> digits;
gbt> // Цикл по 3 первым цифрам дробной части.
gbt> for (unsigned i = 0; i < 3; ++i)
gbt> {
gbt> number *= 10;
gbt> unsigned digit = abs(static_cast<int>(floor(number))) % 10;
gbt> digits.insert(digit);
gbt> }
gbt> // Проверяем, содержится ли 0 в множестве 3 первых цифр дробной части.
gbt> return digits.end() != digits.find(0u);
Re[3]: cpp
От: gbt Россия  
Дата: 11.12.05 08:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Зачем set, если в цикле digit можно проверить на 0. и выйти (return true) не проходя по остальным цифрам...

Согласен, но что-то на меня нашло... Я выше по этому поводу комментарий уже оставил.
Re[2]: cpp
От: xbit Россия  
Дата: 11.12.05 11:28
Оценка:
bool containsZero(double number)
{
  bool result = false;;

  for (int i = 0; i < 3; ++i)
  {
    int digit = long(number * 10) % 10;
    if (digit == 0)
      result = true;
    number = number * 10;
  }

  return result;
}


Мда, с set'ом ты явно погорячился
Нас не догонят!
Re: cpp
От: Pr0F Беларусь  
Дата: 11.12.05 11:35
Оценка: -1
Здравствуйте, Marysia, Вы писали:

M>Подскажите, как определить есть ли среди первых трех цифр из дробной части заданного положительного числа цифра 0?? я страдаю (


Сразу пришла вголову такая идейка:
Пусть у тебя есть число
float f;
if ( (f*10)%10 == 0 )
{
printf("1 цифра после запятой ноль\n")'
}
if ( (f*100)%10 == 0 )
{
printf("2 цифра после запятой ноль\n")'
}
if ( (f*1000)%10 == 0 )
{
printf("3 цифра после запятой ноль\n")'
}
Re[2]: cpp
От: xbit Россия  
Дата: 11.12.05 12:28
Оценка:
Здравствуйте, Pr0F, Вы писали:

PF>Сразу пришла вголову такая идейка:

PF> Пусть у тебя есть число
PF> float f;
PF>if ( (f*10)%10 == 0 )
PF> {
PF> printf("1 цифра после запятой ноль\n")'
PF> }
PF>if ( (f*100)%10 == 0 )
PF> {
PF> printf("2 цифра после запятой ноль\n")'
PF> }
PF>if ( (f*1000)%10 == 0 )
PF> {
PF> printf("3 цифра после запятой ноль\n")'
PF> }

Садись, 2 !!!
Нас не догонят!
Re[3]: cpp
От: Pr0F Беларусь  
Дата: 11.12.05 13:37
Оценка: +1
Здравствуйте, xbit, Вы писали:

X>Здравствуйте, Pr0F, Вы писали:


PF>>Сразу пришла вголову такая идейка:

PF>> Пусть у тебя есть число
PF>> float f;
PF>>if ( (f*10)%10 == 0 )
PF>> {
PF>> printf("1 цифра после запятой ноль\n")'
PF>> }
PF>>if ( (f*100)%10 == 0 )
PF>> {
PF>> printf("2 цифра после запятой ноль\n")'
PF>> }
PF>>if ( (f*1000)%10 == 0 )
PF>> {
PF>> printf("3 цифра после запятой ноль\n")'
PF>> }

X>Садись, 2 !!!

X>

логика верная, а то что не привел к типу int до сравнения с нулём и не поставил запятые — так ведь я лишь демонстрировал идею, а не законченное решение
if ( ( ( (int)(f*10) ) %10 ) == 0 )
{
printf("1 цифра после запятой ноль\n");
}
Re: cpp
От: Аноним  
Дата: 12.12.05 08:59
Оценка: -1 :))
Здравствуйте, Marysia, Вы писали:

M>Подскажите, как определить есть ли среди первых трех цифр из дробной части заданного положительного числа цифра 0?? я страдаю (


bool IsZero(double dVal)
{
  char szTemp[16];

  sprintf(szTemp, "%u", (int)dVal);

  return strchr(szTemp, "0") == NULL ? false : true;
}


P.S. Плохой код.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.