该程序求n的平方根。
solve1是利用二分法找到小于或等于sqrt(n)的最大正整数。
sovle2是利用牛顿迭代法求平方根。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /**************************************************************** * Description: 2022_J_3 * Author: Alex Li * Date: 2023-08-15 22:39:41 * LastEditTime: 2023-08-23 23:17:11 ****************************************************************/ #include <iostream> using namespace std; int n,k; //solve1采用二分法,找到最接近小于或等于n的平方根的整数 int solve1(){ int l = 0, r = n; while(l <= r){ int mid = (l + r) / 2; //每次二分,mid逐渐接近我们要找的数。 if (mid * mid <= n) l = mid + 1; //用mid^2<=n 做判断 else r = mid - 1; } return l - 1; } //牛顿迭代求平方根。取x<n 对 x=(x+n/x)/2 不断循环计算,x会逐渐接近n的平方根 double solve2(double x){ if (x == 0) return x; for (int i = 0; i < k; i++) // x = (x + n / x) / 2; return x; } int main(){ cin >> n >> k; //solve1得到一个最接近的小于或等于n的平方根的数,把这个数再给到solve2进行计算。 double ans = solve2(solve1()); //如果n的平方根是整数,哪么ans是整数,ans*ans==n成立。 cout << ans << ' ' << (ans * ans == n) << endl; return 0; } |