请问一下,在PTA里面,对于要按照问题要求输出这样的一个同构数,如果系统显示我的代码运行超时,我应该怎么去优化一下呢?
#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;
}
#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;
}
仅供参考,望采纳。
仅供参考!谢谢!
#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;
}