由於Java內置Biginteger,但是卻沒有開方的接口,不得不自己動手寫,在網上學習了,先根據被開方數位數確定開方後數的位數,在自高位枚舉逼近待開方數,最後求得開方結果。
public static BigInteger sqrt(String x) {
int mlen = x.length(); //被開方數的長度
int len; //開方後的長度
BigInteger beSqrtNum = new BigInteger(x);//被開方數
BigInteger sqrtOfNum; //存儲開方後的數
BigInteger sqrtOfNumMul; //開方數的平方
String sString;//存儲sArray轉化後的字符串
if(mlen%2 == 0) len = mlen/2;
else len = mlen/2+1;
char[] sArray = new char[len];
Arrays.fill(sArray, '0');//開方數初始化爲0
for(int pos=0; pos<len; pos++){
//從最高開始遍歷數組,每一位都轉化爲開方數平方後剛好不大於被開方數的程度
for(char num='1'; num<='9'; num++){
sArray[pos] = num;
sString = String.valueOf(sArray);
sqrtOfNum = new BigInteger(sString);
sqrtOfNumMul = sqrtOfNum.multiply(sqrtOfNum);
if(sqrtOfNumMul.compareTo(beSqrtNum) == 1){
sArray[pos]-=1;
break;
}
}
}
return new BigInteger(String.valueOf(sArray));
}
這個接口需求的是一個String類參數,當然也可以通過簡單的變動變爲Biginteger。