我正在尝试学习C ++,而我正试图解决这个问题。基本上我需要计算一个数的平方根。我想我正在走上正轨,但是当我运行代码时,输入数字后没有任何反应。
int n;
double r, intGuess, guess, ratio;
// user input
cout << "Enter number: ";
cin >> n;
intGuess = n;
guess = n / 2;
ratio = intGuess / guess;
while (ratio >= 1.01 || ratio <= 0.99)
{
r = n / guess;
guess = (guess + r) / 2;
}
cout << endl;
cout << "The square root of " << n << " is " << guess << endl;
答案 0 :(得分:4)
你的循环似乎是无限的,因为你永远不会在其中更新ratio
...如果条件是true
一次,它永远是true
......
应该是这样的:
ratio = intGuess / guess;
while (ratio >= 1.01 || ratio <= 0.99)
{
intGuess = guess; // Save the previous value of guess
r = n / guess;
guess = (guess + r) / 2;
ratio = intGuess / guess; // Update ratio here with the previous and the
// actual value of guess
}
此外:
直到猜测在前一次猜测的1%之内
您应保存之前的guess
并将其用于ratio
,而不是原始版本。
Live example。我在循环中添加了两行。
答案 1 :(得分:0)
您应该将之前的猜测与当前的猜测进行比较。那不是你在做什么。
示例:假设您输入4.第一个猜测将是2,这是确切的值。每个连续的猜测也将是2.即使您在循环内更新比率为IntGuess / guess,它也将是2. Always。
修复您的代码,以便比较之前的猜测和当前的猜测,并且一切都会很好。