您的位置:首页 > 其它

sgu 111 Very simple problem 高精开平方

2014-01-19 22:53 344 查看
    给一个不超过10^1000的数n,求最大的数k使得k^2<=n。这题本来是要手算开平方的..但是高精乘法+二分也能做..c++的话估计要压位了吧,要么可能超时..java就直接写吧...

import java.io.*;
import java.util.*;
import java.math.*;

public class aaa {

public static void main(String[] args) {
Scanner cin= new Scanner(new BufferedInputStream(System.in));
String s = null;
s=cin.next();
int len=s.length();
BigInteger st=BigInteger.valueOf(0);

for (int i=0; i<len; i++)
{
st=st.multiply(BigInteger.valueOf(10));
st=st.add(BigInteger.valueOf(s.charAt(i)-'0'));
}
// System.out.println(st);
if (st.compareTo(BigInteger.valueOf(1))==0)
{
System.out.println(st);
return;
}

BigInteger l=BigInteger.valueOf(1);
BigInteger r=st;
BigInteger m,tp;
while(l.compareTo(r)==-1)
{
m=l.add(r).divide(BigInteger.valueOf(2));
if (m.multiply(m).compareTo(st)==1)
{
r=m;
}
else l=m.add(BigInteger.valueOf(1));
}
System.out.println(l.subtract(BigInteger.valueOf(1)));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: