基准时间限制:4 秒 空间限制:131072 KB 分值: 320 难度:7级算法题
收藏
关注
给出一个大整数N,求不大于N的平方根的最大整数。例如:N = 8,2 * 2 < 8,3 * 3 > 8,所以输出2。
Input
给出一个大数N(N的长度 <= 100000)。
Output
输出不大于Sqrt(n)的最大整数。
Input示例
9
Output示例
3
思路:牛顿迭代法
AC代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Scanner;
public class M1166 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String a = in.next();
if(a.length()<9) {
System.out.println(Math.sqrt(Double.valueOf(a)));
}
else {
BigInteger num = new BigInteger(a);
if(a.length()%2==0) {
a = a.substring(0,a.length()/2+1);
}else {
a = a.substring(0,(1+a.length())/2);
}
BigInteger x = new BigInteger(a);
if(a.equals("1")) {
System.out.println("1");
}else {
while(num.compareTo(x.multiply(x))<0) {
x = x.add(num.divide(x)).divide(new BigInteger("2"));
}
}
System.out.println(x);
}
}
}