C语言中怎么用简单粗暴的方法找水仙花数
这篇文章主要介绍了C语言中怎么用简单粗暴的方法找水仙花数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中怎么用简单粗暴的方法找水仙花数文章都会有所收获,下面我们一起来看看吧。
什么是水仙花数:
指一个n位数,其各位数字的n次方之和确好等于该数本身
例如:
1 1^1=1;
153 3^3+5^3+1^3=153;
问题:求0~100000之间的水仙花数,并打印出来
看题目,找突破口:
0~100000 我可以想到用循环来判断0~10000间的数字
由栗子可知:我们需要求数字是几位
要用到次方,则我们需要引用math函数库里的pow函数
求和,依旧要使用循环
那么开始写代码,走一步思考一步:
#include<stdio.h>#include<math.h>intmain(){inti=0;for(i=0;i<=100000;i++){intn=1;//n为位数intz=i;//经过while后i改变,i未变前赋值给z,代替原值i进行后面的计算while(z/10!=0)//这里刚开始直接用i进行运算死循环{n++;z=z/10;//用i运算的话,当i=10时i=i/10直接等于1,死循环,所以用变量z代替i}if(i==Sum(i,n))//判断和是否等于原值printf("%d",i);}return0;}
看代码一定要看后面的注释,这里要注意的点:
用了n代表位数,求n时while循环会改变i值,不利于后面的计算,所以用z代替
设置函数Sum来计算和,函数代码如下:
intSum(intx,inty)//x接收i,y接收n{intk=0;intnum=0;intsum=0;for(k=0;k<y;k++)//循环求和{num=pow(x%10,y);//取出每一位的数字,求次方sum+=num;//累加求和x/=10;//去掉最低位的数字}returnsum;//返回和}
完整代码如下:
#include<stdio.h>#include<math.h>intSum(intx,inty){intk=0;intnum=0;intsum=0;for(k=0;k<y;k++){num=pow(x%10,y);sum+=num;x/=10;}returnsum;}intmain(){inti=0;for(i=0;i<=100000;i++){intn=1;intz=i;while(z/10!=0){n++;z=z/10;}if(i==Sum(i,n))printf("%d",i);}return0;}
运行结果:
关于“C语言中怎么用简单粗暴的方法找水仙花数”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言中怎么用简单粗暴的方法找水仙花数”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。