为什么不定义额外的变量就不能使用此C程序?

时间:2018-10-23 17:21:45

标签: c

#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位数的阿姆斯壮数字。请帮助我了解我在第一个代码中做错了什么。谢谢。

1 个答案:

答案 0 :(得分:4)

pow函数的每个参数都使用一个double并返回一个双精度值,因此它在幕后所做的不仅仅是简单的重复乘法。结果值可能比实际结果略大或略小,如果略小,则转换为int时,结果将被截断。例如,如果pow(5, 3)返回〜124.99999,则结果将被截断为124。

由于只求每个数字,因此只需明确地进行乘法运算即可避免此问题:

sum += remainder * remainder * remainder;