输入一个大数(正的),输出它算数平方根的整数部分。还是java省心
import java.io.*;
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger n, m;
while(cin.hasNextBigInteger()){
n = cin.nextBigInteger();
String theNumber = n.toString();
m = sqrt(theNumber);
System.out.println(m);
}
}
public static BigInteger sqrt(String theNumber) {
int length = theNumber.length(), i;
BigInteger res = BigInteger.ZERO;
BigInteger twenty = BigInteger.valueOf(20);
BigInteger t, x=BigInteger.ZERO, v, few=BigInteger.ZERO;
BigInteger hg = BigInteger.valueOf(100);
String tmpString = null;
int pos = 2-length%2;
tmpString = theNumber.substring(0, pos);
while (true) {
v = few.multiply(hg).add(BigInteger.valueOf(Integer.parseInt(tmpString)));
if (res.compareTo(BigInteger.ZERO)==0) i=9;
else i = v.divide(res.multiply(twenty)).intValue();
for (; i>=0; i--) {
t = res.multiply(twenty).add(BigInteger.valueOf(i)).multiply(BigInteger.valueOf(i));
if (t.compareTo(v)<=0) {
x = t;
break;
}
}
res = res.multiply(BigInteger.TEN).add(BigInteger.valueOf(i));
few = v.subtract(x);
pos++;
if (pos>length) break;
tmpString = theNumber.substring(pos-1, ++pos);
}
return res;
}
}