优化代码,总是运行超时


#include
#include
int main()
{
    int n,num1,num2,net,sum=0,j,x;
    scanf("%d",&n);
    num1=pow(10,n-1);
    num2=pow(10,n);
    for(int i=num1;inet=i;
        sum=0;
        for(j=0;jfor(int m=0;mx=arr[m];
            sum+=pow(x,n);
        }
        if(sum==i)
        printf("%d\n",sum);
    }
}

PTA里的题目


#include<stdio.h>
#include<math.h>
int main()
{
    int n,num1,num2,net,sum=0,j;
    scanf("%d",&n);
    num1=pow(10,n-1);
    num2=pow(10,n);
    for(int i=num1;i<num2;i++)
    {
        net=i;
        sum=0;
        for(j=0;j<n;j++)
        {
            sum+=pow((net%10),n);
            net/=10;
        }
        if(sum==i)
        printf("%d\n",sum);
    }
}

这里有两个问题

  1. num2到num1有可能差别很大
  2. 这里的n有没有可能大于9? 如果大于9 这个就有问题了 arr[9],后面计算会无比巨大

img


#include <stdio.h>
#include <math.h>

int main()
{
    int i, n, tmp, count, sum;
    scanf("%d", &n);

    for (i = 0; i <= n; i++)
    {
        //计算数的位数
        tmp = i;
        count = 1;
        while (tmp /= 10)
        {
            count++;
        }

        //计算和
        tmp = i;
        sum = 0;
        while (tmp)
        {
            sum += (int)pow(tmp % 10, count);
            tmp /= 10;
        }

        if (sum == i)
        {
            printf("%d ", i);
        }
    }

    return 0;
}