2012-07-22 94 views
1

我想計算,這將作爲一個參數,但沒有使用循環或遞歸傳遞一個整數的屈光力(基10只)的方法:如何製作沒有循環或遞歸的電源方法?

這裏的方法是使用FORR循環最簡單的形式:

static long power(int val) { 
    long y = 10l; 

    if (val == 1) { 
     return y; 
    } else { 
     for (int x = 0; x < val - 1; x++) { 
      y *= 10; 

     } 
     return y; 

    } 
} 
+1

'Math.pow(10,val)' – Alexander 2012-07-22 12:24:47

+5

爲什麼要避免循環和遞歸? – 2012-07-22 12:26:02

+0

使用內置方法超出範圍:) – 2012-07-22 12:26:45

回答

5

最簡單的方法是使用Math.pow

假設你不想這樣做,你可以使用查找表。只有少量的有限數量的結果適合長期。像這樣的東西會工作:

static final long[] results = { 1L, 10L, 100L, /* etc... */ }; 

static long power(int val) { 
    return results[val]; 
} 
+0

我知道內置的方法,但我想要自己執行 – 2012-07-22 12:31:30

+1

@Eslam,並且您認爲bilt-in方法不使用循環? – Alexander 2012-07-22 12:33:55

+0

實際上它確實和iam誰將做它沒有循環或遞歸:) – 2012-07-22 12:36:27

0

我不明白你爲什麼會想這樣做,但很明顯,這會工作:

(警告:因爲你想讓它醜陋的)

  1. 轉換數爲字符串(使用鹼-b表示,b = 10)
  2. 追加零
  3. 字符串轉換爲數字,並返回結果

當然,這只是循環

+0

它只隱藏循環,如果你發現一個方法,追加正確數量的零你:-) – 2012-07-22 12:42:43

+2

@JBNizet'「0000000000000000」.substring(0,power)'想起來了。 – 2012-07-22 12:49:01

+1

touché。然後,所有的希望都消失了,我們需要找到一個實現'pow'的庫。 – tiwo 2012-07-22 12:53:47

0

有可能是使用字符串的方法。像...

String zeros = new String(new char[val]).replace('\0', '0'); 
String init = "1"; 
String out = init.concat(zeros); 
return Long.valueof(out); 

但我認爲替換也會使用一個循環裏面。也許Array.fill沒有(所以你可以嘗試使用char [])