Hola! bueno mi problema es el siguiente, hice un programa en C q se trata de ingresar dos numeros y luego decir en que tipo de bases son iguales ... en el caso que sean iguales en mas de una base, solo se debe imprimir la mas pequeña ... pero no me funciona bien ... porque ingreso los dos numeros pero me arrojan bases q no deberian ser ....
Este es mi codigo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double Convert(char *numero, int base);
bool VerificarNumero(char *numero, int base);
int ValorDigito(char d);
double Convertidor_base(char * n, int base)
{
int Multiplicador = 1;
int marca1, DigitoNo;
int Valor = 0;
if(!VerificarNumero(n, base))
{
return -1;
}
marca1 = strlen(n);
DigitoNo = marca1-1;
while(DigitoNo >= 0)
{
Valor += ValorDigito(n[DigitoNo])*Multiplicador;
Multiplicador *= base;
DigitoNo--;
}
return Valor;
}
bool VerificarNumero(char *n, int base) // variable booleana osea de 1 o 0 no puede guardar variables mas grandes ke que esa
{ //n=numero
int i = 0; // b=base
int v;
while(n[i])
{
v = ValorDigito(n[i]);
if(v < 0 || v >= base)
return 1;
i++;
}
return 0;
}
int ValorDigito(char d) // esto es fundamental , tambien lo tengo en mi programa
{
if(d >= '0' && d <= '9')
return d-'0';
if(d >= 'a' && d <= 'f')
return 10+d-'a';
if(d >= 'A' && d <= 'F')
return 10+d-'A';
return -1;
}
main()
{
//int convert;
double base_x, base_y;
int i, j;
char x[20],y[20];
int bandera=0;
while(1) {
system("cls");
printf("Ingrese los siguientes datos ");
printf("\n---------------------------------\n\n");
printf("\nIngrese el numero para *x*:");
scanf("%s",&x);
if(x[0]=='0') // x tiene q ser distinto a cero
break;
printf("\nIngrese los numeros para *y*:");
scanf("%s",&y);
if(y[0]=='0') // y tiene q ser distinto a cero
break;
{
for(i=2;i<17;i++) // no se de cual empezarlo
{
base_x=Convertidor_base(x,i); // se guarda la conversion en x_v
for(j=2;j<17;j++) // no sé de cual empezarlo
{
base_y=Convertidor_base(y,j);// se guarda la conversion en y_v
if(base_x==base_y) // SI SON IGUALES
{
printf("\n\n\t\t\t %s *base %i* = %s *base %i*\n\n\n\n",x,i,y,j);
bandera=1;
break;
}
}
if (bandera)
break;
}
if (bandera==0)
printf("\n\n\n\t\t <::: %s no es igual a %s en cualquier base de 2..16 :::>\n\n\n\n\n",x,y);
system("pause");
}
}
}
Espero que me puedan ayudar a solucionar este problema =D Gracias