diff --git a/README.md b/README.md index 5f720515..89df2bf7 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ C - decimal_to_hexa - decimal_to_octal - to_decimal + - hexa_to_octal + ## Data Structures - stack diff --git a/conversions/hexal_to_octal.c b/conversions/hexal_to_octal.c new file mode 100644 index 00000000..097ba87c --- /dev/null +++ b/conversions/hexal_to_octal.c @@ -0,0 +1,132 @@ +/* C program to convert Hexadecimal to Octal number system */ + +#include + +int main() +{ + char hex[17]; + long long octal, bin, place; + int i = 0, rem, val; + + /* Input hexadecimal number from user */ + printf("Enter any hexadecimal number: "); + gets(hex); + + octal = 0ll; + bin = 0ll; + place = 0ll; + + /* Hexadecimal to binary conversion */ + for(i=0; hex[i]!='\0'; i++) + { + bin = bin * place; + + switch(hex[i]) + { + case '0': + bin += 0; + break; + case '1': + bin += 1; + break; + case '2': + bin += 10; + break; + case '3': + bin += 11; + break; + case '4': + bin += 100; + break; + case '5': + bin += 101; + break; + case '6': + bin += 110; + break; + case '7': + bin += 111; + break; + case '8': + bin += 1000; + break; + case '9': + bin += 1001; + break; + case 'a': + case 'A': + bin += 1010; + break; + case 'b': + case 'B': + bin += 1011; + break; + case 'c': + case 'C': + bin += 1100; + break; + case 'd': + case 'D': + bin += 1101; + break; + case 'e': + case 'E': + bin += 1110; + break; + case 'f': + case 'F': + bin += 1111; + break; + default: + printf("Invalid hexadecimal input."); + } + + place = 10000; + } + + place = 1; + + /* Binary to octal conversion */ + while(bin > 0) + { + rem = bin % 1000; + + switch(rem) + { + case 0: + val = 0; + break; + case 1: + val = 1; + break; + case 10: + val = 2; + break; + case 11: + val = 3; + break; + case 100: + val = 4; + break; + case 101: + val = 5; + break; + case 110: + val = 6; + break; + case 111: + val = 7; + break; + } + + octal = (val * place) + octal; + bin /= 1000; + + place *= 10; + } + + printf("Hexadecimal number = %s\n", hex); + printf("Octal number = %lld", octal); + + return 0; +}