阿姆斯特朗号的C程序给出了错误的输出

时间:2017-04-13 06:07:39

标签: c

此程序未显示153为Armstrong编号,而对于其他编号,输出正确。就像我检查407一样,它给出了正确的答案,但是当我检查153时,它显示的不是阿姆斯特朗号码。

#include <stdio.h>
#include <math.h>

int main() {
    int no, copy, re, n = 0, ans = 0;

    printf("\n\tEnter a new number: ");
    scanf("%d", &no);

    copy = no;

    while (copy != 0) {
        copy = copy / 10;
        n++;
    }
    copy = no;

    while (copy != 0) {
        re = copy % 10;
        ans = ans + pow(re, n);
        copy = copy / 10;
    }

    if (ans == no) {
        printf("\n\t %d is an Armstrong number", no);
    } else {
        printf("\n\t %d is not an Armstrong number", no);
    }
    getch();
    return 0;
}

5 个答案:

答案 0 :(得分:1)

首先,您需要为变量

指定正确的名称

试试这个代码它适用于我

#include <stdio.h>
#include <math.h>

int main()
{
    int number, originalNumber, remainder, result = 0, n = 0 ;

    printf("Enter an integer: ");
    scanf("%d", &number);

     originalNumber = number;

    while (originalNumber != 0)
    {
        originalNumber /= 10;
        ++n;
    }

    originalNumber = number;

    while (originalNumber != 0)
    {
        remainder = originalNumber%10;
        result += pow(remainder, n);
        originalNumber /= 10;
    }

    if(result == number)
        printf("%d is an Armstrong number.", number);
    else
        printf("%d is not an Armstrong number.", number);

    return 0;
}

在此计划中,首先计算number of digits of an integer并将其存储在n变量中。

pow()函数用于计算while循环每次迭代中各个数字的幂。

答案 1 :(得分:0)

您的代码没有问题。它工作正常。编译代码gcc -o file filename.c -lm并运行./file以避免链接问题。

答案 2 :(得分:0)

在我的Visual Studio 2013中,我使用您的代码获得了下面的图像。 我想你可以尝试不同的编译器软件。

enter image description here

答案 3 :(得分:0)

您的算法是正确的,并且您的程序在我的系统上按预期执行(缺少换行符除外)。如果您的系统报告153为是阿姆斯壮的数字,则它会被破坏,可能是因为将数字提升到第n次幂的浮点运算。试试这个替代方案:

#include <stdio.h>
#include <math.h>

int main(void) {
    int no, copy, re, i, d, n = 0, ans = 0;

    printf("Enter a new number: ");
    if (scanf("%d", &no) == 1) {
        copy = no;
        while (copy != 0) {
            copy = copy / 10;
            n++;
        }
        copy = no;
        while (copy != 0) {
            d = copy % 10;
            for (re = d, i = 1; i < n; i++) {
                re *= d;
            }
            ans = ans + re;
            copy = copy / 10;
        }
        if (ans == no) {
            printf("%d is an Armstrong number\n", no);
        } else {
            printf("%d is not an Armstrong number\n", no);
        }
        getch();
    }
    return 0;
}

答案 4 :(得分:0)

在这种情况下,不能使用内置的“电源”功能。相反,您可以使用以下代码:

               int power(int n,int r)
           {
               int i,p=1;
               for(i=1;i<=r;i++)
                p=p*n;
               return p;
           }

并在您的主函数中调用

           result += power(remainder, n);

它适用于所有情况。