2012-03-28 76 views
0

我有一個程序可以將八進制數轉換爲十進制數。大部分工作。 (上面的代碼更多,假設所有變量都被正確聲明)。C中的八進制到十進制多位數

for(i; i > 0; i--) 
{   
    decimalNumber = (decimalNumber + (number['i'] * pow(8,power))); 
    power++; 
} 

該代碼正確地轉移到右側做其他數字,但它不會更改它正在使用的數字。例如,當輸入4 *(8^0)+ 5 *(8^1)時,以八進制輸入54將導致輸出爲36,4 *(8^0)+ 4 *(8^1)或44.

+4

number ['i']絕對,肯定,不是你想要的。 – 2012-03-28 01:41:35

回答

3

'i'是一個常數。你的意思可能只是i。另外,<< 3

+0

當我把它作爲我時,它的輸出與它應該沒有什麼關係。它輸出一個八位數字。 – CoolerScouter 2012-03-28 01:36:52

+1

好的。那就意味着你的邏輯關閉了。回到繪圖板。 – 2012-03-28 01:40:19

0

您正在以錯誤的方向遍歷字符串。 或者,更好,改變你的邏輯:

5 -> 5*8^0 
54 -> (5*8^0)*8 + 4 
543 -> ((5*8^0)*8 + 4)*8 + 3 
1

正如伊格納西奧指出,'i'是一個常數,將導致你訪問相同的越界的數組元素對循環的每個迭代。由於我假設你從i開始等於數組中的位數(你沒有顯示該代碼),所以當你用它作爲數組索引時,你想從它減去1。

0
number[0] is 5 
number[1] is 4 
decimalNumber is 0 
power is 0 

i = 1 downto 0 do 
    decimalNumber = (decimalNumber + (number[i:1,0] * pow(8,power:0,1))); 
    power++; 
do end