问题描述:
问题分析:
1.使用暴力遍历试验合适的解。
2.牛顿迭代法求解。
完整代码:
#include <iostream>
using namespace std;
int mysqrt(int n)
{
// 暴力算法:
// int t = 0;
// if (n == 0 || n == 1)
// return n;
// else if (n >= 2147395600)
// return 46340;
// for (int i = 2; i < n/2 + 1; i++)
// {
// t = i * i;
// if (t >= n)
// {
// if (t == n)
// return i;
// else
// return i - 1;
// }
// t = 0;
// }
//牛顿迭代法
//while(l_res - result > 0.001) result = (l_res + n / l_res) / 2
double compare_res = n, res = n / 2.0;
while ( compare_res - res > 0.0001)
{
compare_res = res;
res = (res + n / res) / 2.0;
}
return int(res);
}
int main()
{
int n;
while (cin >> n)
{
cout << mysqrt(n) << endl;
}
return 0;
}
执行结果: