Здравствуйте, 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);
}
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);
Здравствуйте, Аноним, Вы писали:
А>Зачем set, если в цикле digit можно проверить на 0. и выйти (return true) не проходя по остальным цифрам...
Согласен, но что-то на меня нашло... Я выше по этому поводу комментарий уже оставил.
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;
}
Здравствуйте, 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")'
}
Здравствуйте, 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");
}
Здравствуйте, Marysia, Вы писали:
M>Подскажите, как определить есть ли среди первых трех цифр из дробной части заданного положительного числа цифра 0?? я страдаю (