
#include <stdio.h>
#include <conio.h>

int digitos,baseini,basefinal,num,numfinal,tabla[80],tabla_bien[80];

int Pedir_Base();
int Pedir_Num(int baseini);
int BaseDiez_Base(int num,int basefinal);
int Transform(int num);
void Imprimir_tabla(int digitos);

void main() {
  clrscr();
  baseini=Pedir_Base();
  num=Pedir_Num(baseini);
  basefinal=Pedir_Base();
  digitos=BaseDiez_Base(num,basefinal);
  Imprimir_tabla(digitos);

  printf("\nPulse una tecla para finalizar ...");
  getch();

}

int Pedir_Base() {
  int b;
  do {
    printf("\nIntroduce la Base: ");
    fflush(stdin);
    scanf("%d",&b);
  } while (b<2 || b>16);
  return(b);
}

int Pedir_Num(int baseini) {
  int seguir=1,k=0,nuevo=0,numero;char n=0;
  printf("Introduce un n£mero: ");
  while (seguir) {
    fflush(stdin); cscanf("%1c",&n);
    if (n==13)
      seguir=0;
    else
      k=Transform(n);
    if (seguir)
      if (k<baseini) {
	numero=nuevo+k;
	nuevo=numero*baseini;
      }
      else {
	gotoxy(wherex()-1,wherey());
	printf(" ");
	gotoxy(wherex()-1,wherey());
      }
  }
  return (numero);
}

int BaseDiez_Base(int num,int basefinal) {

  int n=0,con=0,resto=0,pos=0,i=0,digitos=0;
  n=num; con=0;
  while (n!=0) {
    resto=(n%basefinal);
    n=(n/basefinal);
    tabla[con]=resto;
    printf("\n guardo en tabla[%d]=%d",con,resto);
    digitos=con;
    con++;
   }
  pos=0;i=(con-1);
  for (i;i>=0;i--) {
    tabla_bien[pos]=tabla[i];
    printf("\ntablabien[%d]=%d",i,tabla_bien[pos]);
  pos++;
  }
return(digitos);
}

int Transform(int num) {
  int k=0;
  if (num>=48 && num <=57)
    k=(num-48);
  else
    if (num>=65 && num <=70)
      k=(num-55);
    else
      if (num>=97 && num <=102)
	k=(num-87);
      else
	k=99;
return(k);
}

void Imprimir_tabla(int digitos) {
  //printf("\n llegan digitos=%d\n",digitos);
  printf("\nEl n£mero pedido es: ");
  for (int i=0;i<=digitos;i++)
    printf("%x",tabla_bien[i]);

}
