#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
void CambioBase (char *num, int baseorigen, int basedestino);
int
main (void)
{
char *num;
int baseorigen, basedestino;
clrscr ();
printf ("Escribe el numero a convertir: ");
scanf ("%s", num);
printf ("Dado en base (2,8,10,16): ");
scanf ("%d", &baseorigen);
printf ("Convertir a base (2,8,10.16): ");
scanf ("%d", &basedestino);
CambioBase (num, baseorigen, basedestino);
getch ();
return 0;
}
void
CambioBase (char *num, int baseorigen, int basedestino)
{
long destino[20];
char *tmp;
int n, i, tam = strlen (num) - 1, total = 0;
for (i = 0, n = tam; n >= 0; i++, n--)
{
switch (num[n])
{
case 'a':
{
destino[i] = 10 * pow (baseorigen, i);
break;
}
case 'b':
{
destino[i] = 11 * pow (baseorigen, i);
break;
}
case 'c':
{
destino[i] = 12 * pow (baseorigen, i);
break;
}
case 'd':
{
destino[i] = 13 * pow (baseorigen, i);
break;
}
case 'e':
{
destino[i] = 14 * pow (baseorigen, i);
break;
}
case 'f':
{
destino[i] = 15 * pow (baseorigen, i);
break;
}
default:
{
tmp[0] = num[n];
destino[i] = atoi (tmp) * pow (baseorigen, i);
break;
}
}
total += destino[i];
}
printf ("EL %s base %d a base %d es: ", num, baseorigen, basedestino);
if (basedestino == 16 && total >= 0 && total <= 15)
{
switch (total)
{
case 10:
{
printf ("a");
break;
}
case 11:
{
printf ("b");
break;
}
case 12:
{
printf ("c");
break;
}
case 13:
{
printf ("d");
break;
}
case 14:
{
printf ("e");
break;
}
case 15:
{
printf ("f");
break;
}
default:
{
printf ("%d", total);
break;
}
}
}
else
{
for (i = 0; total > 0; i++)
{
destino[i] = total % basedestino;
total /= basedestino;
}
for (i = i - 1; i >= 0; i--)
{
switch (destino[i])
{
case 10:
{
printf ("a");
break;
}
case 11:
{
printf ("b");
break;
}
case 12:
{
printf ("c");
break;
}
case 13:
{
printf ("d");
break;
}
case 14:
{
printf ("e");
break;
}
case 15:
{
printf ("f");
break;
}
default:
{
printf ("%d", destino[i]);
break;
}
}
}
}
}