1.题目
输入一个n,求n位数的水仙花数。
分析:
所谓的“水仙花数”是一个N位数其各位数字的N次方和等于该数本身,例如153是“水仙花数”,因为:153 = 1^3+ 5^3 + 3^3。
首先,我们需要输入n,然后遍历,例如输入3 ,我们就需要遍历100~999
这里需要用到pow函数,它的头文件是#include<math.h>.
示例如下:
#include <stdio.h> /* printf */
#include <math.h> /* pow */
int main ()
{
printf ("7 ^ 3 = %f\n", pow (7.0, 3.0) );
printf ("4.73 ^ 12 = %f\n", pow (4.73, 12.0) );
printf ("32.01 ^ 1.54 = %f\n", pow (32.01, 1.54) );
return 0;
}
运行结果:
7 ^ 3 = 343.000000
4.73 ^ 12 = 125410439.217423
32.01 ^ 1.54 = 208.036691
其次,我们需要判断每位的n次方相加是否等于该数本身,这里先需要得到每位的数字,再计算每位的数字的n次方,然后将它们相加。
下面我们来看看如何用代码编写这一程序。
2.实践
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n); //输入n
int i,j,k;
for(i=pow(10,n-1);i<pow(10,n);i++){ //遍历
k=i;
int sum=0;
while(k){
j=k%10; //将个十...位通过取余算出
k/=10;
sum+=pow(j,n); //相加
}
if(sum==i){ //判断每位数的n次方和是否与自身相等
printf("%d ",i);
}
}
return 0;
}
运行结果:
若输入3
153 370 371 407
若输入4
1634 8208 9474
以此类推~
今天的解题思路分享完啦,如果喜欢的话给个赞鼓励一下吧!