计算平方根c++; 我正在制作一个C++程序来计算一个数的平方根。此程序不使用“sqrt”数学内置操作。有两个变量,一个用于用户输入的数字,另一个用于该数字的平方根。这项计划效果不佳,我相信有更好的办法:
这是我的完整代码:计算平方根c++; 我正在制作一个C++程序来计算一个数的平方根。此程序不使用“sqrt”数学内置操作。有两个变量,一个用于用户输入的数字,另一个用于该数字的平方根。这项计划效果不佳,我相信有更好的办法:,c++,C++,这是我的完整代码: #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 * squareroo
#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;
}
#包括
使用名称空间std;
int main(){
int平方根=0;
整数;
库特数;
while(平方根*平方根!=数字){
平方根+=0.1;
}
cout以下是整数平方根计算的解释:
在数论中,正数的整数平方根
整数n是正整数m,它是最小的最大整数
大于或等于n的平方根
您开始的方法很好,但需要进行几次修正才能使其生效:
您使用的是int
您希望将1添加到平方根
而不是0.1
当平方根*平方根
等于或大于数字
时,您希望停止计算。如果数字是26,则没有一个整数将自身乘以26
在数字等于26的情况下,您想返回5还是6?在while
循环之后,平方根的值将是6,因此您可能希望将其反转为5(如果平方根*平方根
不同于数字
)
下面是示例:
#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;
}
#包括
使用名称空间std;
int main(){
int平方根=0;
整数;
库特数;
while(平方根*平方根<数字){
平方根+=1;
}
如果(平方根*平方根!=数字)——平方根;
cout以下是整数平方根计算的解释:
在数论中,正数的整数平方根
整数n是正整数m,它是最小的最大整数
大于或等于n的平方根
您开始的方法很好,但需要进行几次修正才能使其生效:
您使用的是int
您希望将1添加到平方根
而不是0.1
当平方根*平方根
等于或大于数字
时,您希望停止计算。如果数字是26,则没有一个整数将自身乘以26
在数字等于26的情况下,您想返回5还是6?在while
循环之后,平方根的值将是6,因此您可能希望将其反转为5(如果平方根*平方根
不同于数字
)
下面是示例:
#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;
}
#包括
使用名称空间std;
int main(){
int平方根=0;
整数;
库特数;
while(平方根*平方根<数字){
平方根+=1;
}
如果(平方根*平方根!=数字)——平方根;
cout如果A不是完美平方,此函数将计算平方根的下限。此函数基本上使用二进制搜索。您事先知道的两件事是,一个数字的平方根将小于或等于该数字,它将大于或等于1。因此,我们可以在该范围内应用二进制搜索。下面是我的实现。让我来看看如果您不理解代码中的任何内容,请了解。希望这对您有所帮助
int sqrt(int A) {
if(A<1)return 0;
if(A==1)return 1;
unsigned long long start,end,mid,i,val,lval;
start = 1;
end = A;
while(start<=end){
mid = start+(end-start)/2;
val = mid*mid;
lval = (mid-1)*(mid-1);
if(val == A)return mid;
else if(A>lval && A<val) return mid-1;
else if(val > A)end = mid;
else if(val < A)start = mid+1;
}
}
intsqrt(inta){
如果(A如果A不是完美平方,此函数将计算平方根的下限。此函数基本上使用二进制搜索。您事先知道的两件事是,一个数字的平方根将小于或等于该数字,它将大于或等于1。因此,我们可以在该范围内应用二进制搜索。下面是我的实现。让我知道如果你不理解代码中的任何内容,希望这能有所帮助
int sqrt(int A) {
if(A<1)return 0;
if(A==1)return 1;
unsigned long long start,end,mid,i,val,lval;
start = 1;
end = A;
while(start<=end){
mid = start+(end-start)/2;
val = mid*mid;
lval = (mid-1)*(mid-1);
if(val == A)return mid;
else if(A>lval && A<val) return mid-1;
else if(val > A)end = mid;
else if(val < A)start = mid+1;
}
}
intsqrt(inta){
如果(A此函数使用嵌套间隔(未测试),您可以定义精度:
#include <math.h>
#include <stdio.h>
double mySqrt(double r) {
double l=0, m;
do {
m = (l+r)/2;
if (m*m<2) {
l = m;
} else {
r = m;
}
}
while(fabs(m*m-2) > 1e-10);
return m;
}
#包括
#包括
双mySqrt(双r){
双l=0,m;
做{
m=(l+r)/2;
如果(m*m 1e-10);
返回m;
}
请参见此函数使用嵌套间隔(未测试),您可以定义精度:
#include <math.h>
#include <stdio.h>
double mySqrt(double r) {
double l=0, m;
do {
m = (l+r)/2;
if (m*m<2) {
l = m;
} else {
r = m;
}
}
while(fabs(m*m-2) > 1e-10);
return m;
}
#包括
#包括
双mySqrt(双r){
双l=0,m;
做{
m=(l+r)/2;
如果(m*m 1e-10);
返回m;
}
请参见代码的问题在于,只有当数字的平方根正好是N*0.1时,它才有效,其中N是整数,这意味着如果答案是1.4142而不是1.400000000,那么代码就会失败。有更好的方法,但它们都更复杂,并且使用数值分析来近似答案,这是最简单的方法这就是牛顿-拉斐逊方法
您可以使用下面的函数,此函数使用牛顿-拉斐逊方法来查找根,如果您需要有关牛顿-拉斐逊方法的更多信息,请查看wikipedia文章。如果您需要更高的精度-但性能更差-您可以将“0.001”减少到您的模拟,或者如果您想要更好的性能但精度更低,则可以将其增加强迫症
float mysqrt(float num) {
float x = 1;
while(abs(x*x - num) >= 0.001 )
x = ((num/x) + x) / 2;
return x;
}
如果您不想导入math.h
,您可以编写自己的abs()
:
浮动abs(浮动f){
if(f<0)
f=-1*f;
返回f;
}
你的代码的问题是,只有当数字的平方根正好是N*0.1,其中N是一个整数,这意味着如果答案是1.4142而不是1.400000000,你的代码才会失败。有更好的方法,但它们都更复杂,并且使用数值分析来近似答案,这是最简单的方法ch是牛顿-拉斐逊方法
您可以使用下面的函数,此函数使用牛顿-拉斐逊方法来查找根,如果您需要有关牛顿-拉斐逊方法的更多信息,请查看wikipedia文章。如果您需要更高的精度,但性能更差,则可以减少
#include <iostream>
using namespace std;
int main()
{
double x = 1, average, s, r;
cout << "Squareroot a Number: ";
cin >> s;
r = s * 2;
for ( ; ; ) //for ; ; ; is to run the code forever until it breaks
{
average = (x + s / x) / 2;
if (x == average)
{
cout << "Answer is : " << average << endl;
return 0;
}
x = average;
}
}