设计函数int sqrt(int x),计算 x 的平方根。
输入格式
输入一个 整数 x,输出它的平方根。直到碰到文件结束符(EOF)为止。
输出格式
对于每组输入,输出一行一个整数,表示输入整数的平方根。
样例输入
1
2
3
4
5
6
7
8
9
样例输出
1
1
1
2
2
2
2
2
3
#include<iostream>
using namespace std;
int sqrt(int x)
{
unsigned long low=1,high=x,mid=(low+high)/2;
while(low<=high){
mid=(low+high)/2;
if (mid*mid==x) return mid;
else if (mid*mid<x) {low=mid+1; mid=(low+high)/2;}
else if (mid*mid>x) {high=mid-1; mid=(low+high)/2;}
}
return mid;
}
int main()
{
int n;
while(cin>>n){
cout<<sqrt(n)<<endl;
}
return 0;
}
思路:用二分查找。
总结:一开始的时候用的线性查找,没AC,提示超时,后来改换二分查找法,还是超时……左思右想不明白,后来搜了一些其他网友的答案,发现思路相似,我的仍然AC不了,最后怀疑可能是测试数据的位数较大,把sqrt函数里面输入的int类型换成了unsigned long类型,一下子AC了,心力憔悴……
得到教训:平方根,没有负数输入的,就用unsigned类型。还有,空间一般足够的,变量申明类型的时候就尽量申明大一些,不要给自己找麻烦!
388

被折叠的 条评论
为什么被折叠?



