Decimal to Octal Conversion in C
Decimal to Octal Conversion
Decimal to Octal conversion is the process of converting a decimal number (base-10) into its equivalent octal number (base-8). Each octal digit represents a power of 8.
For example, the decimal number 31 is equal to octal 37 because:
(3 × 8¹) + (7 × 8⁰) = 24 + 7 = 31
We will explore three methods to convert a decimal number to an octal number using C programming.
Method 1: Using Division by 8
We divide the decimal number by 8 repeatedly, storing the remainders. These remainders represent the digits of the octal number from least significant to most significant.
#include <stdio.h> void decimalToOctal(int decimal) { int octal[50], i = 0; while (decimal > 0) { octal[i] = decimal % 8; decimal = decimal / 8; i++; } printf("Octal equivalent: "); for (int j = i - 1; j >= 0; j--) { printf("%d", octal[j]); } printf("\n"); } int main() { int decimal; printf("Enter a decimal number: "); scanf("%d", &decimal); decimalToOctal(decimal); return 0; }
Output:
Enter a decimal number: 31 Octal equivalent: 37
Method 2: Using printf Function
C has a built-in function printf which can directly print the octal representation of a decimal number using the format specifier %o.
#include <stdio.h> int main() { int decimal; printf("Enter a decimal number: "); scanf("%d", &decimal); printf("Octal equivalent: %o\n", decimal); return 0; }
Output:
Enter a decimal number: 31 Octal equivalent: 37
Method 3: Using Recursion
We can convert a decimal number to octal recursively. The recursive function divides the number by 8 and prints the remainders, which form the octal digits.
#include <stdio.h> void decimalToOctalRecursive(int decimal) { if (decimal == 0) { return; } decimalToOctalRecursive(decimal / 8); printf("%d", decimal % 8); } int main() { int decimal; printf("Enter a decimal number: "); scanf("%d", &decimal); if (decimal == 0) { printf("Octal equivalent: 0\n"); } else { printf("Octal equivalent: "); decimalToOctalRecursive(decimal); printf("\n"); } return 0; }
Output:
Enter a decimal number: 31 Octal equivalent: 37