为啥找找守形数总是多一个

#include
#include
int main()
{
char buf1[4], buf2[4];
for (int i = 1000; i < 1111; i++)
{
int a = 0, b = 3;
int n = 9*i;
int c = i;
while (c!= 0)
{
buf1[a++] = c % 10 ;
c = c / 10;
}
while (n != 0)
{
buf2[b--] = n % 10 ;
n = n / 10 ;
}
if (strcmp(buf1, buf2) == 0)
printf("%d\n", i);
}
return 0;
}

首先你确定你是在找守形数?
那个9*i是什么意思?
b=3又是什么意思?
还有buf1,buf2怎么没初始化?
在使用strcmp之前,查查
strcmp的结束判断是怎么做的?

你的意思应该是 n=i*i;
while(n!=0)中应该是取最低三位吧?而且你这个三位是不是因为b=3 这个设置,放颠倒了?
而且这里的b--,如果n=i*i时候,会不会导致b为负数,向前越界?
哎?怎么会是最低三位?1000不应该是4位吗?

最后,为什么不这样写:
n=i*i;
if(i == (n%10000)) 则为守形数并输出。