2016-02-13 74 views
-1
package code; 

public class convert { 

public int getPower(int power, int base){ 
    int ans = 1; 
    for(int i=0; i<power; i++){ 
     ans = ans * base; 

    } 
    return ans; 
} 

public int baseten (String s, int base){ 
    int ret = 0; 
    for(int i = 0; i<s.length(); i++){ 
     char cur = s.charAt(i); 

     if(base >= 0 && base <= 9){ 
      int p = getPower(i, base); 
      int v = p * (cur - '0'); 
      ret += v; 

     } 

    } 

    return ret; 


    } 
} 

這應該接受一個字符串和一個int並返回該數字的基數10。例如(「1001」,2)應該返回9.它目前給了我幾個不同的測試的錯誤答案,我不知道爲什麼。非常感謝!將字符串中的數字轉換爲基數爲10的數字

+4

'Integer.parseInt(s,base)'? – assylias

+0

好的@assylias –

+0

任何解釋投票? –

回答

0

你正在計算你的權力在錯誤的順序,給最後的數字,而不是第一個數字的權重。

事實上,你不需要計算每個數字的功率;相反,您可以直接乘以累加器:

for(int i = 0; i<s.length(); i++){ 
    char cur = s.charAt(i); 
    if(base >= 0 && base <= 9){ 
     ret = ret * base + (cur - '0'); 
    } 
} 

這樣做的工作方式與在紙上編寫號碼時的工作方式相同。如果你寫了「10」,然後你在那之後再寫一個數字,那麼這個值會變大10倍(或者兩次,或者無論你的基數是多少)。你添加另一個數字,它再次得到十(或兩次,或其他)的時間。

我們必須直接思考數十和數百以及數千列的唯一原因是當我們大聲朗讀十進制數字時,我們必須使用正確的單詞。

-1

你得到錯誤的結果只是因爲你的二進制轉換不是 正確。因爲當你的字符串的字符s[0]基本功率 應s.length()-1-i;

例如:0101輸入if i = 0然後0*2^3+if i = 1然後 1*2^2+if i = 20*2^1+if i = 31*2^0它產生的結果是: 5

但在你的代碼將會產生10.

在這裏,你必須聲明稱J int ret = 0,j = s.length()-1;新變量之後,它初始化爲string length()-1您必須將變量傳遞給getPower()功能是這樣的:int p = getPower(j, base);

包代碼;

public class convert { 

public int getPower(int power, int base){ 
    int ans = 1; 
    for(int i=0; i<power; i++){ 
     ans = ans * base; 

    } 
    return ans; 
} 

public int baseten (String s, int base){ 
    int ret = 0,j = s.length()-1; 
    for(int i = 0; i<s.length(); i++,j--){ 
     char cur = s.charAt(i); 

     if(base >= 0 && base <= 9){ 
      int p = getPower(j, base); 
      int v = p * (cur - '0'); 
      ret += v; 
     } 
    } 
    return ret; 
    } 
} 

你也可以做到這一點的只有一行:

int decimalVal = Integer.parseInt("0010101010",2); 

它會產生二進制串的十進制值。