# C program to Convert Decimal to Octal

C Program to convert Decimal number into Octal number. Decimal number is a number with base 10 whereas octal number is a number with base 8. Valid decimal numbers are (0-9) whereas valid octal numbers are (0-7). In decimal to octal conversion, we divide the decimal number by 8 and write the remainder in the reverse order to get the equivalent octal number.

Example 1:

Given Decimal Number: 85

Method followed: Divide the number by 8 until its zero and note remainder in each case.

Divide 85 by 8, number is 10, remainder is 5.
Divide 10 by 8, number is 1, remainder is 2.
Divide 1 by 8, number is 0, remainder is 1.

So the octal number is 125 (remainders in reverse order).

Example 2:

Given Decimal Number: 195

Divide 195 by 8, number is 24, remainder is 3.
Divide 24 by 8, number is 3, remainder is 0.
Divide 3 by 8, number is 0, remainder is 3.

So the octal number is 303.

Problem Description

Write a C program to convert decimal numbers to octal numbers.

Problem Solution

The procedure for converting decimal to octal in C is as follows.

1. Take a decimal number as input.
2. Divide the input number by 8 and obtain its remainder and quotient. Store the remainder in the array.
3. Repeat the step 2 with the quotient obtained. Do this until the quotient becomes zero.
4. Print the array in the reverse order to get the output.

Program/Source Code

Here is source code of the C program to Convert Decimal to Octal. The C program is successfully compiled and run on a Linux system. The program output is also shown below.

```/*
* C program to Convert Decimal to Octal
*/
#include <stdio.h>

int main()
{
long decimalnum, remainder, quotient,octalnum=0;
int octalNumber, i = 1, j;

printf("Enter the decimal number: ");
scanf("%ld", &decimalnum);
quotient = decimalnum;

//Storing remainders until number is equal to zero
while (quotient != 0)
{
octalNumber[i++] = quotient % 8;
quotient = quotient / 8;
}

//Converting stored remainder values in corresponding octal number
for (j = i - 1; j > 0; j--)
octalnum = octalnum*10 + octalNumber[j];
printf("Equivalent octal value of decimal no %d is: %d  ", decimalnum,octalnum);
return 0;
}```
Program Explanation

1. Take a decimal number as input and store it in the variable decimalnum.
2. Copy the variable decimalnum to the variable quotient.
3. Divide the number by 8 and store the remainder in an array until the number is equal to 0.
4. Store the reverse of the array in number format in variable ‘octalnum’.
5. Print the octal number.

Expected Input and Output:

Enter the decimal number: 195

Dividing 195 by 8, number is 32, octalNumber=195 % 8 = 3.
Dividing 24 by 8, number is 3, octalNumber=32 % 8 = 0.
Dividing 3 by 8, number is 0, octalNumber=3 % 8 = 3.

Now iterate over the stored array in reverse order.
Initially octalnum=0 and for each iteration

octalnum= octalnum * 10 + octalNumber[i]

Octalnum = (0 * 10) + octalNumber = (0 * 10) + 3 = 3
Octalnum = (3 * 10) + octalNumber = (3 * 10) + 0 = 30
Octalnum = (30 * 10) + octalNumber = (30 * 10) + 3 = 303

Corresponding octal number is 303.

Time Complexity: O(log n)
In this program, we are dividing the number by 8 in every step, so time complexity is O(log n) with base 8.

Space Complexity: O(n)
Space is required to store the remainders, so space complexity is O(n).

Runtime Test Cases
```Output:
Enter the decimal number: 195
Equivalent octal value of decimal no 195 is: 303```

To practice programs on every topic in C, please visit “Programming Examples in C”, “Data Structures in C” and “Algorithms in C”. 