1. 程式人生 > >(高精度 開平方)- 1166 大數開平方

(高精度 開平方)- 1166 大數開平方

基準時間限制: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
import java.math.*;
import java.util.*;

public class Main{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		BigInteger n=in.nextBigInteger();
		String s=n.toString();
		if(s.length()%2==0)
			s=s.substring(0,s.length()/2+1);
		else
			s=s.substring(0,(1+s.length())/2);
		BigInteger m=new BigInteger(s);
		BigInteger two=new BigInteger("2");
		if(s=="1")
			System.out.println(1);
		else{
			while(n.compareTo(m.multiply(m))<0){
				 m=(m.add(n.divide(m))).divide(two);
			}
			System.out.println(m);
		}
		in.close();
	}
}