#include <stdio.h>
#include <conio.h>
#include <math.h>
int main ()
{
int remainder,number,sum=0,temp;
clrscr();
printf("Enter any number\n");
scanf("%d",&number);
temp=number;
while(temp!=0)
{
remainder=temp%10;
sum=sum+pow(remainder,3);
temp=temp/10;
}
if(sum==number)
{
printf("armstrong number");
}
else
{
printf("not an armstrong number");
}
getch();
return 0;
}
我试图为3位数字创建一个armstrong数字检查器。我正在使用turbo C最新的编译器。此代码转到 else ,不适用于Armstrong编号371。同时,
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main ()
{
int remainder,number,sum=0,temp,cube=0;
clrscr();
printf("Enter any number\n");
scanf("%d",&number);
temp=number;
while(temp!=0)
{
remainder=temp%10;
cube=pow(remainder,3);
sum=sum+cube;
temp=temp/10;
}
if(sum==number)
{
printf("armstrong number");
}
else
{
printf("not an armstrong number");
}
getch();
return 0;
}
仔细查看第二个代码,我添加了一个新变量 cube ,并将公式更改为
cube = pow(remainder,3);
sum = sum + cube;
突然,该程序适用于所有3位数的阿姆斯壮数字。请帮助我了解我在第一个代码中做错了什么。谢谢。
答案 0 :(得分:4)
pow
函数的每个参数都使用一个double
并返回一个双精度值,因此它在幕后所做的不仅仅是简单的重复乘法。结果值可能比实际结果略大或略小,如果略小,则转换为int
时,结果将被截断。例如,如果pow(5, 3)
返回〜124.99999,则结果将被截断为124。
由于只求每个数字,因此只需明确地进行乘法运算即可避免此问题:
sum += remainder * remainder * remainder;