English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

碰到難題了!
最近碰到一個題目:是輸入一個整數(integer) n 值,然後要求n的平方數跟2的n次方兩個!不過題目規定要用陣列去求,然後n值可能很大很大,(會比long來的大),因此我不曉得該怎麼宣告...該怎麼去寫程式碼?

有哪位好心的大大能幫我完成嗎?

(2的n次方輸出值可能會高達200位數....@@~)
(n值可能會在long值上限..=.=)

2006-05-18 16:03:24 · 2 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

2 個解答

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 ");   System.exit(1);  }  long l = Long.parseLong(args[0]);  BigNumber bg = new BigNumber();  int[] sqr = bg.squareOf(l);  bg.printReversedIntArray(sqr);  System.out.println();  int[] powerTwo = bg.twoToPowerOf(l);  bg.printReversedIntArray(powerTwo);  System.out.println(); }}

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

fedest.com, questions and answers