Cambio de base en C

Junio 29 2009Se el primero en comentar

Guardado en : General

#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;
	      }
	    }
	}
    }
}
Comparte esta información:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • LinkedIn
  • Technorati
  • TwitThis

Deja un comentario