C语言实现自守数 (自守数是指一个数的平方的尾数等于该数自身的自然数) 为什么输出结果一直是1啊?

编写程序,求小于等于n的所有自守数。

输入:从键盘随机输入一个正整数n(<10000000)。
输出:输出小于n的所有自守数,每个数之间以一个西文空格间隔。

#include <stdio.h>
int main(){
int n,i,j,flag;
scanf("%d",&n);
for(i=1;i<n;i++){
j=i;
int b;
b=j*j;
if(j%10==b%10)
{flag=1;}
else
{flag=0;break;}
if(flag==1)
printf(" %d",i);}
}

修改如下,供参考:

#include <stdio.h>
int main()
{
    int i, n, k, t, s, flg = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        t = i; k = i * i; s = 1;
        while (t) { s *= 10; t /= 10; }
        if ((k % s) == i)
            printf("%c%d", flg++ == 0 ? '\r' : ' ', i);
    }
    if (!flg)
        printf("No exist");
    return 0;
}