有人看看这个守行数问题

img


我的代码如下:
#include<stdio.h>
int main()
{
int i,a=0,m,n,j=0,k=0,l[1000]={0},h=0;
scanf("%d%d",&m,&n);
{
for(i=m; i<=n; i++)
{
a=i*i;
if(i<10&&a%10==i || i<100&&a%100==i || i<1000&&a%1000==i || i<10000&&a%10000==i)
{
l[j]=i;
j++;
}
}
}
if(l[0]==0)
printf(""No exist"");
else
for(k=0;k<j;k++)
{
printf("%d",l[k]);
h++;
if(h>0 && h<j)
printf(" ");
}
return 0;
}
有大佬知道为什么一直是部分正确吗?

这么写太复杂。只需要将平方数和原数分别求余10后得到余数判断是否相等。

#include  <stdio.h>
int main()
{
    int m,n,i,k,t;
    scanf("%d%d",&m,&n);
    for(i=m;i<=n;i++)
    {
        k=i*i;
        t=i;
        while(t>0)
        {
            if(k%10 != t%10)
                break;
            k=k/10;
            t=t/10;
        }
        if(t==0)
            printf("%d ",i);
    }

    return 0;
}