利用数组从个位开始设定每个位上的数字,缩短了运行时间
代码如下
#include <stdio.h>
int pow(int a,int b); /*自行写一个pow函数,降低运行时间*/
int main(void)
{
int N,a1,sum; /*设定a1为N位数*/
scanf("%d",&N);
int a[10];
for(int i=1;i<N;i++) /*利用数组,首项为个位,给各个位数对应的数字赋值*/
{
a[i]=0;
}
a[N]=1;
while(a[N]<10) /*设定当最高位不大于10的时候进行循环*/
{
sum=0;
a1=0;
for(int i=1;i<=N;i++) /*算出a1*/
{
a1+=a[i]*pow(10,i-1);
}
for(int i=1;i<=N;i++) /*算出各个位数的N次方和*/
{
sum+=pow(a[i],N);
}
if(sum==a1)
{
printf("%d\n",a1);
a[1]++;
}
else if(sum<a1)
{
a[1]++;
}
else /*当sum>a1时,从个位数开始循环,依次取零,使下一位加一,直到sum<=a1,break结束循环*/
{
for(int i=1;i<N;i++)
{
a[i]=0;
a[i+1]++;
sum=0;
a1=0;
for(int i=1;i<=N;i++)
{
a1+=a[i]*pow(10,i-1);
}
for(int i=1;i<=N;i++)
{
sum+=pow(a[i],N);
}
if(sum<=a1)
{
break;
}
}
}
}
return 0;
}
int pow(int a,int b)
{
int result=1;
for(int i=1;i<=b;i++)
{
result=result*a;
}
return result;
}
PS:借鉴了自行写整形pow函数的思路