[初学者]这个程序错了吗?如何运行的

[菜鸟求助]这个程序错了吗?怎么运行的
#include <stdio.h>
#include <math.h>

int IsTheNumber ( const int N );

int main()
{
    int n1, n2, i, cnt;

    scanf("%d %d", &n1, &n2);
    cnt = 0;
    for ( i=n1; i<=n2; i++ ) {
        if ( IsTheNumber(i) )
            cnt++;
    }
    printf("cnt = %d\n", cnt);

    return 0;
}
int IsTheNumber ( const int N ){
int n=N; 
int p=sqrt(N);
if(p*p==N){

int temp, flag[10] = {1};

    for(temp=n%10;n;n/=10,temp=n%10)
        if((flag[temp]++)== 1) return 0;
return 1;
}
else return 0;

}[初学者]这个程序错了吗?如何运行的

------解决思路----------------------
sqrt 是有误差的,sqrt(100) 不一定就能得到 10
------解决思路----------------------
引用:
Quote: 引用:

sqrt 是有误差的,sqrt(100) 不一定就能得到 10
我在前面加上了(int)转换还是不行


如果 sqrt(100) 不是 10 的话,你转成 int 也可能得不到 10 啊
------解决思路----------------------
可以写成 sqrt(n + 1)
判重复时,若flag[]内容都初始化成0,则 if (flag[temp]++ == 1) 没问题
------解决思路----------------------
if((flag[temp]++)== 2) return 1;
改为:
if((++flag[temp])== 2) return 1;
------解决思路----------------------
引用:
int IsTheNumber ( const int N ){
int n=N; 
int p=sqrt(N);
if(p*p==N){

int temp, flag[10] = {0};

    for(temp=n%10;n;n/=10,temp=n%10)
        if((flag[temp]++)== 2) return 1;
return 0;
}
else return 0;

}

我自己又改了一下子函数我真的看不错错误,为什么还是错了

改为楼上的代码,试试.