/* =============================================================================================
   Wilfredo Cruz Yarlequé                              wcruzy@gmail.com
   Piura, Perú, Diciembre 03 de 2024
   
   =============================================================================================
   Convierte valor entero entre 0 y 65535 a base 8, base 16 o base 24
   ============================================================================================= */

#include <stdio.h>
#include <math.h>

int validanumero (int);

int validabase (int);

void convierte (int, int);

char letra (int);

void main()
{
	int b=0;
	int n=0;

	do
	{
		printf("\nIngrese valor: ");
		scanf("%d", &n);
	} while (! validanumero (n));

	do
	{
		printf("\nIngrese base : ");
		scanf("%d", &b);
	} while (! validabase (b));

	convierte(n, b);
}

int validanumero(int nume)
{
	if (nume < 0 || nume > 65535)
		return 0;
	else
		return 1;
}

int validabase(int bas)
{
	if (bas == 8 || bas == 16 || bas == 24)
		return 1;
	else
		return 0;
}

void convierte(int numero, int base)
{
	int a[10];
	int i;
	int j;

	i=0;
	do
	{
		a[i] = numero % base;
		i++;
		numero = numero / base;
	} while (numero >= base);

	a[i]=numero;
	printf("\nValor convertido: ");

	for(j = i; j >= 0; j--)
		if (a[j] <= 9)
			printf("%d", a[j]);
		else
			printf("%c", letra(a[j]));

	printf("\n");
}

char letra (int x)
{
	char caracter[14] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N'};
	char letra;

	letra = caracter[x - 10];
	return letra;
}