Python Decimal to Octal Conversion

Beginner
6 min read
Updated: Oct 2026
2 programs
Live preview

What Is Decimal to Octal Conversion?

Decimal (base 10) is the everyday number system. Octal (base 8) uses only digits 0–7. Conversion means rewriting a nonnegative integer using powers of eight instead of powers of ten.

Remember
Rightmost octal digit = 8⁰ (value 1)
Next digit             = 8¹ (value 8)
Next digit             = 8² (value 64)
…

Example: 57₁₀
  57 ÷ 8 → rem 1, then 7
  reverse → 71₈
  Check: 7×8 + 1 = 57
DecimalRemainders (LSD first)Octal
80, then 110
571, then 771
640, 0, then 1100

How to Convert Decimal to Octal in Python

Four clear steps — then pick a remainder loop or the built-in formatter.

  1. Accept a nonnegative integer n.
  2. If n == 0, return "0" immediately.
  3. Collect digits with n % 8 and n // 8, then reverse — or call oct(n)[2:].
  4. Print or return the octal string.
MethodIdeaTimeBest for
Remainder + reverseAppend n % 8, divide by 8, reverse digitsO(log n)Interviews, learning place values
oct(n)[2:]Format n as base 8 in one callO(log n)Production code, short answers

Pseudocode

Pseudocode
function DecimalToOctal(n):          // n >= 0
    if n == 0:
        return "0"

    digits = []
    while n > 0:
        digits.append(n mod 8)       // LSD first
        n = floor(n / 8)

    reverse(digits)
    return join(digits)

Cheat Sheet

Keep these facts handy while writing the program.

TopicDetail
Valid digitsOnly 0–7
Next digitn % 8
Shrink nn = n // 8
OrderFirst remainder = rightmost digit
Built-inoct(n)[2:] or format(n, "o")
Binary link1 octal digit = 3 binary bits
Classic check57 → 71

Live Preview

Enter a nonnegative integer to see remainders and the octal result.

Whole numbers n ≥ 0 (capped at 999999999). Tap a chip or type a value.

Result
Decimal    = 57
Remainders = 1, 7  (LSD → MSD)
Octal      = 71
Check      = 7×8 + 1 = 57

Worked Walkthrough — n = 57

Divide by 8. Stack remainders from right to left, then reverse for the final string.

Calculation
57 ÷ 8 = 7 remainder 1   ← LSD (rightmost)
 7 ÷ 8 = 0 remainder 7   ← MSD (leftmost)

Remainders collected: 1, 7
Reverse for output:   7, 1
Octal:                71

Verify: 7×8¹ + 1×8⁰ = 56 + 1 = 57 ✓

Python Programs

Start with the remainder loop so you can explain every digit. Then use oct / format for a one-line production-style answer.

Example 1 — Remainder + Reverse

Collect n % 8 digits LSD-first, reverse them, then return the octal string.

python
def decimal_to_octal(n: int) -> str:
    if n < 0:
        raise ValueError("Expected a nonnegative integer.")
    if n == 0:
        return "0"

    digits = []
    while n > 0:
        digits.append(str(n % 8))
        n //= 8

    return "".join(reversed(digits))


print(decimal_to_octal(57))  # 71
print(decimal_to_octal(0))   # 0
print(decimal_to_octal(64))  # 100

How It Works

  1. Reject negatives so the learning version stays focused on nonnegative conversion.
  2. Return "0" when n is zero — otherwise the loop would produce an empty string.
  3. While n > 0, append n % 8 (current LSD) and replace n with n // 8.
  4. Reverse the collected digits so the most significant digit comes first.
  5. Return the joined string (for 57: remainders 1, 7 → reverse → "71").

Example 2 — oct() / format

Guard negatives, then let Python format the number as base 8.

python
def decimal_to_octal(n: int) -> str:
    if n < 0:
        raise ValueError("Expected a nonnegative integer.")
    return oct(n)[2:]
    # or: return format(n, "o")


print(decimal_to_octal(57))  # 71
print(decimal_to_octal(0))   # 0
print(decimal_to_octal(8))   # 10

# Bonus: same idea for binary
print(bin(57)[2:])  # 111001
# 71₈ ↔ 111 001₂  (7=111, 1=001)

How It Works

  1. Reject negatives so the contract matches the remainder method.
  2. oct(n) returns a string like "0o71"; [2:] drops the prefix.
  3. format(n, "o") is an equivalent alternative without the 0o prefix.
  4. Zero is handled for you — both return "0".
  5. Optional check: binary of 57 is 111001; grouped as 111 001 it recovers octal digits 7 and 1.

Edge Cases & Pitfalls

Check these before calling the solution done.

Zero

Special-case 0

A plain while n > 0 loop prints nothing — return "0".

Order

Reverse remainders

Printing in collection order reverses the digits (57 would show as 17).

Negatives

Define a policy

This tutorial rejects negatives. Do not silently take an absolute value unless the problem says so.

Wrong base

Use % 8 and // 8

Copy-pasting a binary solution with % 2 produces binary, not octal.

Time and Space Complexity

ProgramTimeExtra space
Remainder + reverseO(log n)O(log n)
oct / formatO(log n)O(log n)

Digit count is about log8 n for positive n.

Key Takeaways

  • Core loop: take n % 8, then divide by 8, until n is 0.
  • Reverse: first remainder is the rightmost digit.
  • Two options: manual remainder loop, or oct(n)[2:].
  • Test set: 57 → 71; 64 → 100; 0 → 0.

One line: collect n % 8 remainders and reverse them — or call oct(n)[2:].

Frequently Asked Questions

Repeatedly take n % 8 (the next digit) and n = n // 8 until n becomes 0, then reverse the digits. Or call oct(n)[2:] / format(n, 'o').
The first remainder is the least significant digit. Reversing prints the usual left-to-right octal form.
A while n > 0 loop never runs, so return "0" before the loop (or use oct/format, which already returns "0").
oct(n) returns a string like '0o71'. Slice off the '0o' prefix with oct(n)[2:], or use format(n, 'o') for the digits alone.
One octal digit equals exactly three binary bits. Octal 7 is binary 111; octal 71 is binary 111001.
The remainder method produces O(log₈ n) digits, which is O(log n). Extra space for the digit buffer is also O(log n).

Next: Disarium Number

Check whether a number equals the sum of its digits raised to their positions.

Disarium number tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful