C中的八进制到十进制多位数

时间:2012-03-28 01:33:12

标签: c

我正在编写一个将Octal转换为Decimal数字的程序。大多数都有效。 (更多代码高于此,假设所有变量都已正确声明)。

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 个答案:

答案 0 :(得分:3)

'i'是常数。你可能只是i。另外,<< 3

答案 1 :(得分:1)

正如Ignacio指出的那样,'i'是一个常量,会导致您在循环的每次迭代中访问相同的out of bounds数组元素。由于我假设您从i开始等于数组中的位数(您没有显示该代码),因此当您将其用作数组索引时,您希望从中减去1。

答案 2 :(得分:0)

你正在以错误的方向遍历字符串。 或者,更好的是,改变你的逻辑:

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

答案 3 :(得分: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