这个题目肯定不能用sqrt这个函数,如果用了话就违背了本题的考察点。
为了解析这个题目,给出一个数学公式:
(n+1)^2=n^2+(2n+1)
(n+1)^2=(n-1)^2+[2(n-1)+1]+(2n+1)
.....
(n+1)^2=1+(2*1+1)+(2*2+1)+...+[2(n-1)+1]+(2n+1)
可以自己动手验证这个公式的正确性。
下面给出代码:(注:下面的代码中不是很严谨,就是在循环的时候如果给出的数字是某个数的平方则可以在O(sqrt(n)))的时间内结束,如果不是某个数的平方的话,那就要循环n/2次才能结束)
#include<stdio.h>
int is_square(int num,int *ret)
{
int i;
int flag=0;
int sum=0;
for(i=0;i<num/2;i++)
{
sum+=2*i+1;
if(sum==num)
{
flag=1;
*ret=i;
break;
}
}
return flag;
}
void main()
{
int n;
int result;
printf("input number:");
scanf("%d",&n);
if(is_square(n,&result))
printf("%d is square of %d.\n",result,n);
}