为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
慕后端8527005 2017-11-20 23:23:14
#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); } } }}不知道错在哪里……貌似死循环了,不显示数值
查看完整描述

3 回答

已采纳
?
慕仰2239238

TA贡献6条经验 获得超2个赞

因为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);
		}
			
	}
}
	


查看完整回答
反对 回复 2017-11-21
?
weibo_不喝咖啡会死星牛_0

TA贡献1条经验 获得超2个赞

第十行这里就出现了死循环

i = 100;

 while(i<1000) {

     j=i%10;

     i=i/10;

     k+=j*j*j;

}

查看完整回答
2 反对 回复 2017-11-21
?
慕后端8527005

TA贡献2条经验 获得超0个赞

//img1.sycdn.imooc.com//5a12f3d7000160c808500771.jpg就像这个样子

查看完整回答
反对 回复 2017-11-20
  • 3 回答
  • 0 关注
  • 2714 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信