C语言,完全平方数 区位图鬼地方个

Problem Description
判断从l到r中有多少个数的每一位都是完全平方数且这个数自身也是完全平方数

Input
t组数据,每组包含两个整数l,r

(0<=l<=r<=1000000)
1<=t<=1000000

Output
每组输出一个答案,表示从l到r有多少符合要求的数

SampleInput
2
1 10
30 100
SampleOutput
3
2

供参考:

#include<stdio.h>

// n^2=1+3+5+……+2n-1 n个奇数(1,3,5,7,...)之和等于n的平方,
//其中n大于0 如果变成了负数,说明它不是平方数
int isPerfectSquare(int num)
{
    int i = 1;
    while (num > 0)
    {
           num -= i;
           i += 2;
    }
    return num == 0;
}

int main()
{
    int i,t,l,r,n,k,cnt,a[7];
    scanf("%d",&t);
    while(t--)
    {
         scanf("%d%d",&l,&r);
         if(l<0 || l>r || r>1000000)//0<=l<=r<=1000000
            continue;
         cnt=0;
         for(i=l;i <= r; i++){
                l = i; k=0;
                for(n=0;n < 7;n++) a[n]=0;
                while(l){
                      a[k++] = l%10;
                      l /= 10;
                }
                if(a[0]==2||a[0]==3||a[0]==7||a[0]==8)//个位数是2、3、7、8的整数一定不是完全平方数
                   continue;
                if(a[0]%2==1 && a[1]%2==1)//个位数和十位数都是奇数的整数一定不是完全平方数
                   continue;
                for(n=0; n < k;n++)
                   if(isPerfectSquare(a[n])!=1)//每一位都是完全平方数
                      break;
                if(n >= k && isPerfectSquare(i)==1)//每一位都是完全平方数且这个数自身也是完全平方数
                   cnt++;
         }
         printf("%d\n",cnt);
    }
    
    return 0;
}