#include<stdio.h>
int baseto10_converter(int num, int x);
int hextodec(char *hexStr);
void dectoupto9converter(int num,int x);
void dectohex(int num);
int main()
{
int inputbase, num, targetbase, temp=0, in;
char str[1000];
printf(" Welcome to Base Converter \n\n\n\n");
printf("Type 1 to proceed or 0 to exit...");
while(scanf("%d", &in) && in)
{
printf("Enter inputbase : ");
scanf("%d", &inputbase);
printf("\nEnter targetbase : ");
scanf("%d", &targetbase);
if(inputbase!=10)
{
if(inputbase<=9 && targetbase==10)
{
printf("\nEnter number of base %d to Convert to %d base: ", inputbase,targetbase);
scanf("%d", &num);
temp=baseto10_converter(num, inputbase);
printf("\nThe number in %d base is : %d", temp);
}
else if(inputbase<=9 && targetbase<=9)
{
printf("\nEnter number of base %d to Convert to %d base: ", inputbase, targetbase);
scanf("%d", &num);
temp=baseto10_converter(num, inputbase);
printf("\nThe number in %d base is : ");
dectoupto9converter(temp, targetbase);
}
else if(inputbase<=9 && targetbase==16)
{
printf("\nEnter number of base %d to Convert to %d base: ", inputbase, targetbase);
scanf("%d", &num);
temp=baseto10_converter(num, inputbase);
printf("\nThe number in %d base is : ");
dectohex(temp);
}
else if(inputbase==16 && targetbase==10)
{
printf("\nEnter number of base 16 to Convert to %d base: ", targetbase);
getchar();
gets(str);
temp=hextodec(str);
printf("\nThe hexadecimal number in %d base is : %d", targetbase, temp);
}
else if(inputbase==16 && targetbase<=9)
{
printf("\nEnter number of base 16 to Convert to %d base: ", targetbase);
getchar();
gets(str);
printf("\nThe hexadecilam number in %d base is : ", targetbase);
temp=hextodec(str);
dectoupto9converter(temp, targetbase);
}
}
else
{
if(targetbase>=2 && targetbase<=9)
{
printf("\nEnter a decimal number to covert to %d base : ", targetbase);
scanf("%d", &num);
printf("\nThe number in %d base is : ", targetbase);
dectoupto9converter(num,targetbase);
}
else if(targetbase==16)
{
printf("\nEnter a decimal number to covert to %d base : ", targetbase);
scanf("%d", &num);
printf("\nThe number in %d base is : ", targetbase);
dectohex(num);
}
}
printf("\n");
}
printf("\n\n\n\nThanx for using my converter, greetings from Anjan\n\n\n");
return 0;
}
int baseto10_converter(int num, int x)
{
int n, i=1, d=0, m=0, l=0;
n=num;
while(n>0)
{
m=(n%10);
n=(n/10);
l=m*i;
d+=l;
i*=x;
}
return d;
}
int hextodec(char *hexStr)
{
int dec;
sscanf( hexStr, "%x", &dec);
return dec;
}
void dectoupto9converter(int num,int x)
{
if(num)
{
dectoupto9converter(num/x, x);
putchar(num%x+'0');
}
return;
}
void dectohex(int num)
{
int mod;
if(num)
{
dectohex(num/16);
mod=num%16;
switch(mod)
{
case 1 :
putchar('1');
break;
case 2 :
putchar('2');
break;
case 3 :
putchar('3');
break;
case 4 :
putchar('4');
break;
case 5 :
putchar('5');
break;
case 6 :
putchar('6');
break;
case 7 :
putchar('7');
break;
case 8 :
putchar('8');
break;
case 9 :
putchar('9');
break;
case 10 :
putchar('A');
break;
case 11 :
putchar('B');
break;
case 12 :
putchar('C');
break;
case 13 :
putchar('D');
break;
case 14 :
putchar('E');
break;
case 15 :
putchar('F');
break;
case 0 :
putchar('0');
break;
}
}
return;
}