碰到難題了!
最近碰到一個題目:是輸入一個整數(integer) n 值,然後要求n的平方數跟2的n次方兩個!不過題目規定要用陣列去求,然後n值可能很大很大,(會比long來的大),因此我不曉得該怎麼宣告...該怎麼去寫程式碼?
有哪位好心的大大能幫我完成嗎?
(2的n次方輸出值可能會高達200位數....@@~)
(n值可能會在long值上限..=.=)
2006-05-18 16:03:24 · 2 個解答 · 發問者 ? 1 in 電腦與網際網路 ➔ 程式設計
public class BigNumber { /* * 傳回一個整數陣列,內容為 n 的平方值。 */ public int[] squareOf(long n) { int[] orig = longToArray(n); int[] result = new int[50]; for (int i = 0; i < orig.length; i++) { for (int j = 0; j < orig.length; j++) { result[i+j] += orig[i] * orig[j]; } } return packArray(result); } /* * 傳回一個整數陣列,內容為 2 的 n 次方。 * 若其結果超過 200 位數,則僅輸出最末 200 位數。 */ public int[] twoToPowerOf(long n) { int[] orig = longToArray(n); int[] result = new int[200]; result[0] = 2; for (long i = 0L; i < n-1; i++) { for (int j = 0; j < result.length; j++) { result[j] = result[j] << 1; } result = packArray(result); } return result; } /* * 將長整數 n 以整數陣列型態表示。 */ int[] longToArray(long n) { int[] orig = new int[25]; for (int i = 0; i < 25; i++) { orig[i] = (int)(n % 10); n /= 10; } return orig; } /* * 將整數陣列做十進位處理,以保持每個元素皆為小於 10,即個位數。 */ int[] packArray(int[] orig) { for (int i = 0; i < orig.length-1; i++) { int x = orig[i] % 10; orig[i+1] += orig[i] / 10; orig[i] = x; } return orig; } /* * 將整數陣列做反序列印,即將代表個位數, * 索引值為零的數字最後一個印出。 */ public void printReversedIntArray(int[] orig) { boolean b = false; for (int i = orig.length-1; i >= 0; i--) { if (orig[i] != 0) { if (!b) b = true; System.out.print(orig[i]); } else { if (b) System.out.print(orig[i]); } } } public static void main(String[] args) { // 執行方式: java BigNumber 長整數 if (args.length == 0) { System.out.println("java BigNumber
2006-05-19 10:12:01 · answer #1 · answered by ? 7 · 0⤊ 0⤋
在 java.math 的 package下,有個class 叫 BigDecimal,理論上可以不限位數的限制,不過當要運算時,都要用呼叫method的方式,不能用+- x /JDK 1.4 APIhttp://java.sun.com/j2se/1.3/docs/api/java/math/BigDecimal.html
2006-05-19 14:10:31 補充:
"理論上可以不限位數的限制"意思是指如果你memory夠大的話,你可以到 n 位數都可以
2006-05-19 14:13:04 補充:
搞錯了,上面那個是 1.3 的API, 下面才是 1.4 的http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html
2006-05-19 10:08:16 · answer #2 · answered by Ahiru 7 · 0⤊ 0⤋