#include<stdio.h>
#define MIDA 80
char vi[MIDA], vo[MIDA];

void canvi_base(int bi, int bo) {
	int i, n, l, aux;
	// Calculo que numero es vi que viene dado en base bi -> n
	for(i=0,n=0;vi[i]!='\n';i++) {
		n = n*bi;
		if ((vi[i]>='0')&&(vi[i]<='9')) n = n+vi[i]-'0';
		else if ((vi[i]>='A')&&(vi[i]<='F')) n = n+vi[i]-'A'+10;
		else if ((vi[i]>='a')&&(vi[i]<='f')) n = n+vi[i]-'a'+10;
	}
	printf("\t%d\n", n);
	// Lo escribo en base bo pero en el vector vo queda al reves.
	for(i=0;n!=0;i++) {
		vo[i] = n % bo;
		if (vo[i]>9) vo[i]=vo[i]-10+'A';
		else  vo[i]=vo[i]+'0';
		n = n / bo;
	}
	l=i;
	vo[i]=0;
	// Invierto el vector
	for(i=0;i<l/2;i++) {
		aux = vo[i];
		vo[i] = vo[l-1-i];
		vo[l-1-i] = aux;
	}
}

main() {
	int bi, bo, i;
	char c='W';
	printf("Intro num en qualsevol base: ");
	for(i=0;c!='\n';i++) {
		scanf("%c", &c);
		vi[i]=c;
	}
	printf("Intro base input i base output: ");
	scanf("%d %d", &bi, &bo);
	canvi_base(bi,bo);
	printf("canvi_base(%d,%d) = %s\n", bi, bo, vo);
}

