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