7 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
高精度算法
原理簡(jiǎn)單來(lái)說(shuō)就是用數(shù)組來(lái)存數(shù)字,然后手工模擬豎式運(yùn)算。
網(wǎng)上資料很多的,隨便搜搜就知道了。

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
因?yàn)閷?duì)于Java不熟悉,且沒(méi)有Java環(huán)境,我給你一個(gè)思路,定義一個(gè)長(zhǎng)度為10000的數(shù)字,2作為初值傳入數(shù)組的最后一位,然后兩層循環(huán),第一層循環(huán)為10000次,內(nèi)部循環(huán)為數(shù)組存入字符的內(nèi)容循環(huán),對(duì)于存入內(nèi)容的數(shù)組,每一位*2,如果大于10,就將進(jìn)位存入前一位數(shù)組即可。結(jié)果集可以直接打印數(shù)組或者轉(zhuǎn)成字符串輸出。 我本想提供計(jì)算結(jié)果的,但是長(zhǎng)度太長(zhǎng),超出評(píng)論范圍了,我給你下計(jì)算結(jié)果的長(zhǎng)度,讓你用來(lái)做驗(yàn)證,計(jì)算結(jié)果的長(zhǎng)度為30103位。

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果目的不是測(cè)試的,一種更基本的辦法是用BigIneteger
。例如:
BigInteger.valueOf(2).pow(100_000);

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
實(shí)現(xiàn)了一個(gè),但是效率不高:
import java.util.Arrays;
public class Application {
public static void main(String[] args) {
// 計(jì)算2的10萬(wàn)次方
int[] num = new int[]{1};
for (int i = 0; i < 100000; i++) {
//做10萬(wàn)次乘以2的計(jì)算
num = timesTwo(num);
}
System.out.println("result= "+Arrays.toString(num)
.replace(", ","")
.replace("[","")
.replace("]",""));
}
public static int[] timesTwo(int[] num) {
//對(duì)最新一個(gè)結(jié)果,從最低位開(kāi)始每一位都乘以2,并存儲(chǔ)其值
for (int i = num.length -1; i >= 0 ; i--) {
num[i] *= 2;
}
//從最低位開(kāi)始檢查每一位是否溢出,并處理溢出
for (int i = num.length -1; i >=0 ; i--) {//判斷是否大于等于10
//如果溢出
if (num[i] >= 10) {
//設(shè)置當(dāng)前位的值
num[i] -= 10;
//如果當(dāng)前位剛好是最高位
if (i==0){
//擴(kuò)大數(shù)組
int[] temp = new int[num.length+1];
//復(fù)制舊數(shù)組數(shù)據(jù)
System.arraycopy(num,0,temp,1,num.length);
//最高位為1
temp[0] = 1;
//引用新擴(kuò)大后的數(shù)組
num = temp;
}else{
//當(dāng)前位的左邊一位加1
num[i-1] += 1;
}
}
}
return num;
}
}

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
用數(shù)組模擬一個(gè)二進(jìn)制數(shù)字,冪次就往數(shù)組最后插0。
最后得出一個(gè)二進(jìn)制的數(shù)組。然后二進(jìn)制數(shù)組轉(zhuǎn)十進(jìn)制字符串。

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
初學(xué)者被布置這樣的作業(yè),老師的意思應(yīng)該不是讓你自己實(shí)現(xiàn)一個(gè)方法。
import java.io.File;
import java.io.PrintStream;
import java.math.BigInteger;
public class A {
public static void main(String[] args) {
try {
String s = new BigInteger("2").pow(100000).toString();
//打印到d盤(pán)num.txt中,因?yàn)閿?shù)字太長(zhǎng)控制臺(tái)打印不下
System.setOut(new PrintStream(new File("d:\\num.txt")));
System.out.print(s);
}
catch(Exception e){
e.printStackTrace();
}
}
}
添加回答
舉報(bào)