Это программа для нахождения числа Армстронга в диапазоне от 1 до 1000 (сумма кубов каждой цифры числа равна самому числу). Она печатает некоторые числа правильно, но не печатает 153. Мой вопрос в том, почему этот случай 153 исключен? Заранее спасибо.
#include<stdio.h>
#include<math.h>
void main()
{
int i,save,rem;
for(i=1;i<1000;i++)
{
int s=0;
int save=i; /*Creating copy of the
variable i.*/
while(save!=0)
{
rem=save%10;
save/=10;
s+=pow(rem,3.0);
}
if(i==s) //Comparing i with the sum.
printf("\n%d",i); //Printing armstrong number.
}
}
s += rem * rem * rem;
и избегатьpow
, который возвращает двойное число, а округление может привести к тому, что оно будет немного меньше, чемi
, что приведет к сбою сравнения. я получаю1, 153, 370, 371, 407
- person David C. Rankin   schedule 26.01.2019pow
для целых чисел. Он вычисляет значения, используя арифметику с плавающей запятой, которая может иметь ошибку с плавающей запятой. Просто используйтеrem * rem * rem
вместо этого. - person BessieTheCookie   schedule 26.01.2019