正整数求n不用sqrt

Posted legendcong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正整数求n不用sqrt相关的知识,希望对你有一定的参考价值。

二分法求根,四舍五入可以用round函数,正整数要用double来取。

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include<iostream>
using namespace std;
#define ACCURACY 0.001 
double newSqrt(double n)
{
    double low, high, mid, tmp;
    // 获取上下界 
    if (n > 1) {
        low = 1;
        high = n;
    }
    else {
        low = n;
        high = 1;
    }
    // 二分法求开方 
    while (low <= high) {
        mid = (low + high) / 2.000;

        tmp = mid * mid;

        if (tmp - n <= ACCURACY && tmp - n >= ACCURACY * -1) {
            return mid;
        }
        else if (tmp > n) {
            high = mid;
        }
        else {
            low = mid;
        }
    }
    return -1.000;
}

int main(void)
{
    double n, res;
    cin >> n;
    res = newSqrt(n);
    printf("%lf
", res);

    return 0;
}

还可以用牛顿迭代法

#include<cstdio>
#include<iostream>
using namespace std;
#define accuracy 0.01
int main()
{
    double n;
    cin >> n;
    double x1;
    x1 = 1;
    while (abs(x1*x1 - n)>accuracy)
    {
        x1= (x1 + n / x1) / 2.00;
    }
    cout << round(x1);
}

 

以上是关于正整数求n不用sqrt的主要内容,如果未能解决你的问题,请参考以下文章

输入一个正整数,求它们所有数字之和C语言程序怎么写

C语言编程:输入两个正整数m和n,求它们的最大公约数。

C语言编程:输入两个正整数m和n,求它们的最大公约数。

平方根

约数大合集(超详细!!!)

Java语言如何求平方根