这是用于打印用户输入的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);
}
}
}
答案 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。