为什么我的代码没有给出正确的输出?

时间:2018-12-19 12:07:20

标签: c

这是用于打印用户输入的m到n范围内的所有阿姆斯壮数字的代码。但是当我运行它时,它没有给出正确的输出。假设我输入m为1和n为10000,它只显示'1是armstrong'而没有其他内容。请告诉我代码中是否有错误。

#include<stdio.h>
void main()
{

    int m,n,a,i,j=0,r; 
    printf("Enter m\n");
    scanf("%d",&m);

    printf("Enter n\n");

    scanf("%d",&n);

    for(i=m;i<=n;i++)
    {
        int temp=i;
        while(i>0)
        {
            r=i%10;
            j=j+r*r*r;
            i=i/10;
        }

        if(j==temp)
        {
            printf("%d is armstrong\n",temp);
        }


    }
}

2 个答案:

答案 0 :(得分:2)

我在您的程序中看到两个错误,j仅初始化一次,并且您正在破坏循环控件i。为了解决这个问题,请在循环内初始化j,然后使用temp而不是i

#include<stdio.h>

int main(void)                      // modern style
{
    int m, n, i, j, r; 
    printf("Enter m\n");
    scanf("%d", &m);

    printf("Enter n\n");
    scanf("%d", &n);

    for(i = m; i <= n; i++) {
        j = 0;                      // initialise j
        int temp = i;
        while(temp > 0) {           // work with temp
            r = temp % 10;
            j = j + r * r * r;
            temp = temp / 10;
        }

        if(j == i) {
            printf("%d is armstrong\n", i);
        }
    }
}

程序输出:

Enter m
1
Enter n
10000
1 is armstrong
153 is armstrong
370 is armstrong
371 is armstrong
407 is armstrong

答案 1 :(得分:2)

for(i=m; i<=n; i++)
{
    j = 0;
    int temp = i;
    while(temp > 0)
    {
        r = temp % 10;
        j = j + r*r*r;
        temp = temp/10;
    }

    if(j == i)
    {
        printf("%d is armstrong\n", i);
    }


}

在while循环中,您需要使用可变的temp来使i保持完整,以便for循环正确继续。在开始新的while循环之前,将j = 0设置为从0开始重新计数。在if语句中比较j == i,因为while循环将temp变量减小为0。