猿问

关于输出100到10000的水仙花数,求助。。。。


#include<stdio.h>

main()

{

int i,j,k;

for(i=100;i<=10000;i++)

{

k=0;

if(i<1000)

{

while(i)

{

j=i%10;

i=i/10;

k+=j*j*j;

}

if(i==k)

{

printf("%d",k);

}


}

else if(i<10000)

{

while(i)

{

j=i%10;

i=i/10;

k+=j*j*j*j;

}

if(i==k)

{

printf("%d",k);

}

}

}

}



不知道错在哪里……貌似死循环了,不显示数值


慕后端8527005
浏览 2715回答 3
3回答

慕仰2239238

因为while循环里面的i的值已经改变了,这样i==k永远不成立!可以用两种方法处理:一、笨方法,参数较多#include<stdio.h> int main(){ int i,n,j,k,m,l; for(i=100;i<10000;i++){ if(i<1000){ n=i/100;//百位数 j=i/10%10;//十位数 k=i%10;//个位数 m=n*n*n+j*j*j+k*k*k; if(i==m){ printf("%d ",i);  } } else{ n=i/1000;//千位数 j=i/100%10;//百位数 k=i/10%10;//十位数 l=i%10;//个位数 m=n*n*n*n+j*j*j*j+k*k*k*k+l*l*l*l; if(i==m){ printf("%d ",i); } } } }二、调用函数(推荐)#include<stdio.h> //自定义函数MYF(int a),作用是每个位数的值三次方或者四次方和。 int MYF(int a){ int b,m=0; if(a<1000){ while(a){ b=a%10; a=a/10; m+=b*b*b; } } else{ while(a){ b=a%10; a=a/10; m+=b*b*b*b; } } return m; } int main() { int i,j,k,s,m,sum=0; for(i=100;i<10000;i++){ if(i==MYF(i)){ printf("%d ",i); } } }

weibo_不喝咖啡会死星牛_0

第十行这里就出现了死循环i = 100; while(i<1000) {     j=i%10;     i=i/10;     k+=j*j*j;}

慕后端8527005

就像这个样子
随时随地看视频慕课网APP
我要回答