2012-03-28 9 views
0

Ich habe ein Programm, das ich schreibe, das Octal in Dezimalzahlen umwandelt. Das meiste funktioniert. (mehr Code darüber, davon ausgehen, dass alle Variablen richtig deklariert sind).Oktal zu Dezimal multidigit in C

Der Code wird korrekt nach rechts verschoben, um andere Ziffern zu verwenden, ändert jedoch nicht die Nummer, mit der er arbeitet. Zum Beispiel ergibt die Eingabe von 54 in Oktal eine Ausgabe von 36, 4 * (8^0) + 4 * (8^1), wenn es 4 * (8^0) + 5 * (8^1) ausgeben soll, oder 44.

+4

nummer ['i'] ist absolut, positiv, NICHT, was Sie wollen. –

Antwort

3

'i' ist eine Konstante. Du hast wahrscheinlich nur i gemeint. Auch << 3.

+0

Wenn ich es einfach so belasse wie ich die Ausgabe nicht annehme, was es sein soll. Es gibt eine achtstellige Zahl aus. – CoolerScouter

+1

Okay. Dann bedeutet das nur, dass deine Logik ausgeschaltet ist. Zurück zum Zeichenbrett. –

0

Sie fahren die Zeichenfolge in die falsche Richtung. Oder besser, Ihre Logik ändern:

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

Wie Ignacio wies darauf hin, ist 'i' eine Konstante ist und bewirkt, dass Sie bei jeder Iteration der Schleife die gleiche außerhalb der Grenzen Array-Element zuzugreifen. Da ich annehme, dass Sie mit i gleich der Anzahl der Ziffern im Array beginnen (Sie haben diesen Code nicht angezeigt), möchten Sie 1 davon abziehen, wenn Sie ihn als Array-Index verwenden.

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