逻辑错在哪里?我发现它不正确但输出它 给出的只是1.它应该给出所有阿姆斯壮的数字从1到500。
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
int a,b,c=0 ,d,i=1;
while(i<=500)
{
b=i;
while(b>0)
{
a=b%10;
c=(a*a*a)+c;
b=b/10;
}
if(c==i)
` printf("%d",i);
i++;
}
getch();
}
答案 0 :(得分:5)
您需要在内循环之前初始化c
:
while(i<=500)
{
b=i;
c=0; /* reset 'c' */
while(b>0)
{
a=b%10;
c=(a*a*a)+c;
b=b/10;
}
}
您正在使用main()
的非标准签名。请参阅:What should main() return in C and C++?
答案 1 :(得分:0)
如果您运行以下代码
你会明白为什么只有一个输出。
注意:正确声明main()
注意:使用常用功能而不是专有的conio.h
注意:使用简单的'for'语句而不是'while'和'i'的增量
#include <stdio.h>
#include <stdlib.h>
//#include<conio.h>
int main()
{
//clrscr();
int a;
int b;
int c=0;
int i=1;
for( ; i<=500; i++ )
{
b=i;
while(b>0)
{
a=b%10;
c=(a*a*a)+c;
b=b/10;
}
printf( "a=%d. b=%d, c=%d\n", a,b,c);
if(c==i)
printf("%d\n",i);
} // end for
//getch();
getchar();
return(0);
} // end function main