【发布时间】:2014-08-10 06:18:53
【问题描述】:
我写了一段代码,它将返回给定整数的平方根(没有小数位,即平方根的底)。但是当我调用它时,它给了我一个十进制值。为什么会这样?这是代码`
#include<iostream>
using namespace std;
long long int sqrt(long long int a){
long long int upper = a,lower=0;
long long int mid = 0;
while (!(mid*mid >= a and (mid-1)*(mid-1) < a)){
mid = (lower+upper)/2;
if(mid*mid > a){
upper = mid;
}
else if(mid*mid <= a){
lower = mid;
}
}
return mid;
}
int main(){
int a;
while(cin>>a){
cout<<sqrt(a)<<endl;
}
}
【问题讨论】:
-
我刚刚用 g++4.8 运行了你的代码,并没有看到这种行为
-
它似乎也是天花板而不是地板
-
这可能取决于
<iostream>是否出于某种原因包含<cmath>,这取决于实现。 -
@hacks 你的回答总是无效的。此外,这是一个打字错误。
-
1) 将
sqrt放入命名空间(例如mynamespace),2) 将mid初始化为正确的初始值。 3)像mynamespace::sqrt一样调用你的函数。
标签: c++ floating-point int