Ошибка в цикле while?

0

Я сделал простой пример для подсчета десятичных точек, но он не останавливается и не дает мне правильный ответ здесь, мой код:

double b=76327741.125;
int count=0;
while(b - (int)b > 0.0)
    {
        b*=10;            
        count++;          
    } 
        cout<<count;

ответ должен быть:

3

но вместо этого цикл while работает бесконечно. Что случилось с моим кодом?

  • 0
    Я думаю, что вы забыли на самом деле вычесть из б. Добавьте b- = 10 выше, b * = 10, и все работает нормально.
  • 3
    Возможный дубликат: stackoverflow.com/questions/17837654/…
Показать ещё 2 комментария
Теги:
decimal-point

2 ответа

0
Лучший ответ

Вероятно, вы должны установить b как b - int(b), чтобы убедиться, что он не продолжает увеличиваться (и потенциально переполняться).

double b=76327741.125;
int count=0;
while(b - (int)b > 0.0)
{
  b = b - int(b); // Note the change here.
  b*=10;
  count++;          
} 
cout<<count;
  • 0
    это работает, но единственная проблема - потеря значения b
  • 0
    Создайте переменную tmp которой вы можете потерять.
1

INT_MAX вы должны были проверить INT_MAX. Номер будет другим. Это зависит от того, используете ли вы код на 32-разрядной или 64-разрядной машине. Если он меньше, чем ваш начальный b, вы наверняка оказались бы в бесконечном цикле. Например, максимальный короткий целочисленный тип равен 32767. В этом случае условие вашего цикла будет таким: 76327741.125 - some negative number, большее 0. Однако в цикле вы увеличили значение b. В следующий раз, когда мы 76327741.125*10 - some negative number строку условия, это будет примерно так: 76327741.125*10 - some negative number

  • 0
    Вы имеете в виду while(b - (int)b > 0.0) { b = b - (int)b; b*=10; count++; }
  • 0
    объяснение в деталях дано @ user3397351
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню