zoj-4005(牛顿迭代法|手动开根号)

手动开根还没学会。。。主要是代码太迷了得研究下

要学手动开根的话可以参考一下链接:

https://www.cnblogs.com/KasenBob/p/10041399.html

我是用了牛顿迭代法,可以参考以下内容:

http://www.matrix67.com/blog/archives/361

以下为代码(本代码由叶晋军同学提供):

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        
        //定义输入类 sc
        Scanner sc = new Scanner(System.in);
        
        //输入T
        int T = sc.nextInt();
        
        //long类型表示整数数据范围有限,描述更大的整数时,借助java.math.BigInteger
        BigInteger n, x;
        String s;
        
        //定义"two"为BigInteger类,值为2
        BigInteger two = new BigInteger("2");
        
        while(T-- > 0){
            n = sc.nextBigInteger();
            
            //toString()方法返回该对象的字符串表示,保存在s中
            s = n.toString();
            
            //x为BigInteger类,值为 截取字符串开头到s.length()/2 + 1位置的子串 并转化成BigInteger类
            x = new BigInteger(s.substring(0, s.length()/2 + 1));
            
            //当x * x > n时,
            //x = (x + (n/x)) / 2
            while(x.multiply(x).compareTo(n) > 0)
                x = x.add(n.divide(x)).divide(two);
            
            // if (x % 2 == 0)判断奇偶数,输出结果
            if(x.mod(two).compareTo(BigInteger.ZERO) == 0)
                System.out.println("0");
            else
                System.out.println("1");
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/KasenBob/p/10046039.html