哪错了怎么改 按照我的思路不用函数 我这个为什么不输出编译错误 哪里不对了

看我写的注释,顺带优化了下
#include<stdio.h>
#include<math.h>
int main()
{
int n1,n2,cnt=0,m=0,b=0;
scanf("%d%d",&n1,&n2);
for(int i=n1;i<=n2;i++)
{
int num[10]={0}; //num数组是存放当前遍历的数的每一位数的,比如i为22的话,num[2]就为2
m=sqrt(i);
if(m*m==i)
{
int a=i;//你这里应该转换下,不能用i,你外层循环用的是i这会影响导致死循环
while(a)
{
b=a%10;
num[b]++;
a/=10;
}
for(int j=0;j<10;j++)
{
if(num[j]>=2) //题目说至少两位数相同,这里应该大于2
cnt++;
}
}
}
printf("%d",cnt);
return 0;
}