我正在制作一个C++程序来计算数字的平方根。该程序不使用内置的“sqrt”数学运算。有两个变量,一个用于用户输入的数字,另一个用于该数字的平方根。该程序不能很好地运行,我相信有更好的方法可以做到:
这是我的完整代码:
#include <iostream>
using namespace std;
int main(){
int squareroot = 0;
int number;
cout << "enter a number sp that i can calculate its squareroot" << endl;
cin >> number;
while (squareroot * squareroot != number){
squareroot+=0.1;
}
cout << "the square root is" << squareroot << endl;
return 0;
}
我知道一定有更好的方法。请帮助。通过Google浏览,但由于我还是个初学者,所以不了解那里的复杂程序。
提前致谢。
最佳答案
以下是整数平方根计算的说明:
您开始的方法不错,但是需要进行一些更正才能使其起作用:
int
,但要在squareroot
中添加1,而不是0.1 squareroot * squareroot
等于或大于number
时停止计算while
循环之后,squareroot
的值将为6,因此您可能需要将其反转为5(如果squareroot * squareroot
与number
不同)下面的例子:
#include <iostream>
using namespace std;
int main(){
int squareroot = 0;
int number;
cout << "enter a number sp that i can calculate its squareroot" << endl;
cin >> number;
while (squareroot * squareroot < number){
squareroot+=1;
}
if (squareroot * squareroot != number) --squareroot;
cout << "the square root is" << squareroot << endl;
return 0;
}
下面是一种使用二进制搜索原理计算平方根的更有效,更优雅的方法。 O(log(n))
int mySqrt(int x) {
if (x==0) return 0;
int left = 1;
int right = x/2 + 1;
int res;
while (left <= right) {
int mid = left + ((right-left)/2);
if (mid<=x/mid){
left = mid+1;
res=mid;
}
else {
right=mid-1;
}
}
return res;
}