在PTA中运行C语言代码显示运行超时如何解决?

请问一下,在PTA里面,对于要按照问题要求输出这样的一个同构数,如果系统显示我的代码运行超时,我应该怎么去优化一下呢?

img

#include
int main()
{
    int n;
    int i,j=0,tail;
    long long sum;
    scanf("%d",&n);
    for(i=n+1;i<5000;i++)
    {
        while(i>0)
        {
            i/=10;
            j++;
        }
        sum=i*i;
        while(j>0)
        {
            tail=sum%10;
            sum/=10;
            j--;
        }
        if(tail==n) break;
    }
    printf("%d",n);
    return 0;
}

img

#include<stdio.h>

int main()
{
    int n;
    scanf("%d", &n);

    // 预处理出每个数的位数和尾数
    int nums[10000];
    for (int i = 0; i < 10000; i++)
    {
        int num = i + n + 1;
        int digits = 0;
        int tail = 0;
        while (num > 0)
        {
            digits++;
            tail = num % 10;
            num /= 10;
        }
        nums[i] = tail;
    }

    // 在循环中直接使用预处理的信息
    for (int i = 0; i < 10000; i++)
    {
        if (nums[i] == n)
        {
            printf("%d", i + n + 1);
            return 0;
        }
    }

    return 0;
}

仅供参考,望采纳。

仅供参考!谢谢!

img

img

img

#include <stdio.h>
#include <string.h>
int main()
{
    int n;
    int i;
    double x;
    char bufx[20] = {'\0'};
    char bufi[10] = {'\0'};
    char *px = NULL;
    char *pi = bufi;

    do
    {
        scanf("%d", &n);
    } while (n >= 5000 || n <= 10);

    for (i = n;; i++)
    {
        x = i * i * 1.0;
        sprintf(bufi, "%d", i);
        sprintf(bufx, "%.0lf", x);
        px = bufx + (unsigned long)(strlen(bufx) - strlen(bufi));
        if (strcmp(px, pi) == 0)
            break;
    }
    printf("%d\n", i);
    return 0;
}