提示错误可以调试为:
#include
int main()
{
int a, b, c, d;
for (a = 100; a < 1000; a++)
{
b = a / 100;
c = a % 100 / 10;
d = a % 100 % 10;
if (b*b*b + c*c*c + d*d*d == a)
printf("水仙花数为%d\n", a);
}
}
如图为运行结果
原先的错误在于#include后没有加
n放错地方了。
#include
void main()
{
int i,j,k,n;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{
n=i*100+j*10+k;
if((i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k)))
printf("水仙花数为:%d\n",n);
}
}
没读你的程序,现在不那样了。
还有问题给我留言。
恩,首先,i,j,k都为局部变量,初值是随机数,n不能在一开始赋值,而且后面n没有更改过,输出的都一样,还有为了可以计算更多的水仙花数,可以吧范围定的更大,而定义的数字类型也要更大,改为超长整形的。
#include
int main()
{
unsigned long long i,j,k,n;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++){
n=i*100+j*10+k;
if(n==((i*i*i)+(j*j*j)+(k*k*k)))
printf("水仙花数为:%d",n);
}
}
程序的是按顺序执行的,你先的n进行赋值,但是此前的i,j k的值都是未知的,所以你输出的n值也就不是规定的三位数之内了,而且在判断语句那边你使用的不是n,输出又用n,简而言之,你只是对n进行未知的赋值,然后又进行输出
这是我改写你的:
#include
void main()
{
int i,j,k,n;
for(i=1;i<10;i++)
{ for(j=0;j<10;j++)
for(k=0;k<10;k++)
if((i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k)))
{
n=i*100+j*10+k;
printf("number is:%d\n",n);
}
}getch();
}
n=i*100+j*10+k;放错位置了 i ,j,k没有赋值会有个随即值所以一是错误的输出
你把n放在if(){}里面
或者直接输出 i*100+j*10+k 都行