输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
思路整理
这道题让我们输入一个位数,所以我们首先要遍历的是这个位数所有的数。
for(int i=(int)pow(10,n);i<=(int)pow(10,n+1)-1;i++)
这样就可以遍历了
尝试写出代码
#include<stdio.h>
#include<math.h>
int main()
{
int a,t,i,n;
long long sum=0;
scanf("%d",&n);
for(i=pow(10,n-1);i<=pow(10,n)-1;i++)
{
a=i;sum=0;
for(int b=1;b<=n;b++)
{
t=a%10;
a/=10;
sum=sum+pow(t,n);
}
if((int) sum==i)
printf("%d\n",i);
}
}
结果一交,发现超时了
这里就比较厉害了,因为math.pow这个函数运行的特别慢,所以我们在后续的编写过程中,尽量不要用pow,最好自己写个pow,(而且pow返回的是double型)
尝试写出pow
#include<stdio.h>
long long pow(int a,int b)
{
long long sum=1;
for(int i=1;i<=b;i++)
sum=sum*a;
return sum;
}
int main()
{
int a,t,i,n;
long long sum=0;
scanf("%d",&n);
for(i=pow(10,n-1);i<=pow(10,n)-1;i++)
{
a=i;sum=0;
for(int b=1;b<=n;b++)
{
t=a%10;
a/=10;
sum=sum+pow(t,n);
}
if((int) sum==i)
printf("%d\n",i);
}
}
这样再一交就可了