给一个不超过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)));
}
}