在c中从100到10000打印amstrong no

时间:2019-03-06 08:07:30

标签: c

代码不会引发任何错误,但不会提供期望的输出 使用ubuntu执行 但输出未显示单个值 显示的输出如下 Amstrong No从100到10000是 v v v

/* Print Amstrong no from 100 to 10000 */
#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
    for(i=100;i<=1000;i++)
    {
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);
        result=0;
        n=0;
    }
}

2 个答案:

答案 0 :(得分:0)

您没有重置n和结果的值。两者都针对每次迭代求和,因此提供了错误的输出。另外,检查范围。

#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\n");
    for(i=100;i<=1000;i++) //153 is a armstrong number!
    {
        result=0, n=0; //have to reset for each number
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);

    }
}

答案 1 :(得分:0)

所以我尝试运行您的代码,并得到以下输出:

Amstrong no from 100 to 10000 are
v
v
v
371

因此正在输出371。问题在于,变量nresult必须在循环结束时重置,因此您必须:

#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
    for(i=371;i<=1000;i++)
    {
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);

        n=0;
        result = 0;
    }
}

最后的输出(也是正确的输出)是:

Amstrong no from 100 to 10000 are
v
v
v
371
407