我正在编写一个将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。
答案 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