[初学者]这个程序错了吗?如何运行的
[菜鸟求助]这个程序错了吗?怎么运行的
------解决思路----------------------
sqrt 是有误差的,sqrt(100) 不一定就能得到 10
------解决思路----------------------
如果 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;
------解决思路----------------------
改为楼上的代码,试试.
#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
------解决思路----------------------
如果 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;
}
我自己又改了一下子函数我真的看不错错误,为什么还是错了
改为楼上的代码,试试.