该题比最基本的输出100-1000以内的水仙花数要复杂一丢丢,关键点难点就是怎么样把一个数的每一位上的数给分离出来。还有一个要说的就是我们在PTA上写题的时候往往会面临的超时的问题,这时候代码确实是找不出来错误的,我们就要看看代码有没有用到pow,sqrt类似于这样的函数,如果有用到我们就要自定义一个函数去实现和他们一样的功能,这时候往往超时的问题就会解决。至于是什么原因,我现在还不是很清楚。下面是实现的代码:
#include<stdio.h>
int Pow(int m,int n)
{
int i=0;
int sum=1;
for(i=0;i<n;i++)
{
sum*=m;
}
return sum;
}
void Print(int n)
{
int min,max,sum=0;
int arr[10]={0};
min=Pow(10,n-1);
max=Pow(10,n);
int i=0;
int j=0,temp;
for(i=min;i<max;i++)
{
temp=i;
sum=0;
for(j=0;j<n;j++)
{
arr[j]=temp%10;//做%的必须是整数
sum+=Pow(arr[j],n);
temp/=10;
}
if(sum==i)
{
printf("%d\n",sum);
}
}
}
int main()
{
int n;
scanf("%d",&n);
Print(n);
return 0;
}
Pow是自定义的实现幂次的函数,希望这段代码对你有用!