J2ME 僅支援 32 位整數(int),13! 即超出範圍。計算 200! 這類大數階乘,需自行實現高精度算術。本文提供基於數組模擬豎式乘法的完整方案,200! 約 3 秒內出結果(實機視性能而定)。
int 數組元素存儲 1 位十進制數字(0-9)int[] sum = new int[400]; // 最終結果 int[] sumG = new int[400]; // 個位乘積暫存 int[] sumTen = new int[400]; // 十位乘積暫存 int[] sumB = new int[400]; // 百位乘積暫存
sum[0] = 1,其餘歸零for (j=1; j<=goal; j++)
j:a=j%10、b=j/10%10、c=j/100length// 乘個位 a
for (i=length; i>=0; i--) {
sumG[i+1] += sum[i]*a / 10; // 進位
sumG[i] = sum[i]*a % 10; // 當前位
}
// 統一處理進位
for (i=0; i<=length+1; i++) {
sumG[i+1] += sumG[i]/10;
sumG[i] %= 10;
}
i+1、i+2),百位右移 2 位for (i=0; i<=length+3; i++) {
sum[i] = sumG[i] + sumTen[i] + sumB[i];
}
for (i=0; i<=length+3; i++) {
sum[i+1] += sum[i]/10;
sum[i] %= 10;
}
public class Check extends MIDlet {
class TestCanvas extends Canvas {
public void paint(Graphics g) {
// 執行階乘計算
// 繪製結果:高位在前,分行顯示
}
}
int goal = 100; // 目標階乘數
// 數組定義...
}
該方案邏輯清晰、無第三方依賴、純 J2ME 實現,適合教學演示與輕量級大數計算場景。工程應用中建議引入成熟的大數庫(如经裁剪的 Java BigInteger 子集)以獲取更好性能。