int mi=(int)sqrt((double)N);
int flag=0;
if(N==mi*mi) flag=1;
这里是判断一个数是否是完全平方数的代码。经过测试,已经确定为正确。第三行的if判断语句是核心。但是我在正确之前有几个错误的写法,十分具有迷惑性。
如下所示。
if(N%mi==0) flag=1;
-
if(N/mi==mi) flag=1
这两个都是错的,但是十分具有迷惑性。
我想主要还是因为C语言的数据类型的限制。比如N=200,那经过第一行的求开方之后的根有mi=14。第二个就可以看出是错的,此时200/14==14。但是很明显200并不是完全平方数。第一个可举例N=20,那mi=4,20%4==0。但是这里也很明显,20并非完全平方数。
网友评论