2012-03-28 9 views
0

私は、OctalからDecimalに変換するプログラムを作成しています。そのほとんどは動作します。 (これ以上のコードは、すべての変数が適切に宣言されていると仮定します)。C言語の8進数から10進数への多項式

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

コードは正しく右に移動して他の桁に移動しますが、動作している番号は変更されません。たとえば、8進数で54を入力すると、4 *(8^0)+ 5 *(8^1)を出力する必要がある場合、36、4 *(8^0)+ 4 *または44.

+4

数字['i']は、絶対に、積極的に、あなたが望むものではありません。 –

答えて

3

'i'は定数です。おそらくちょうどiを意味するでしょう。また、<< 3

+0

私はそれを私のままにしておくと、出力は何に近いものになります。 8桁の数字を出力します。 – CoolerScouter

+1

それはあなたのロジックがオフであることを意味します。ふりだしに戻る。 –

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