Conversión base 10 a base b

diego ramos
09 de Febrero del 2010
Hola estimados compañeros programadores espero que se encuentren muy bien y me puedan orientar en mi duda, tengo que realizar un programa en el que yo ingrese primeramente un numero en base 10 y posteriormente la base a la cual deseo convertir.
Para convertir un numero de base a 10 a cualquier base se necesita hacer lo siguiente:

1.- Dividir el numero en base 10 entre la base.
2.- A partir de la división se obtendrá una parte entera y otra parte fraccional, la parte fraccional serà multiplicada por la base a la que se necesita convertir, esto nos arrojará el último dígito del número en la nueva base.

Un ejemplo:

Numero en base 10 = 20
Base a la que se desea convertir: = 8 ( Octal )
Procedimiento:
División::Parte entera::Parte fraccional:: Multiplicación de P.F por "b" "8"::Dígito del numero en la nueva base

20/8= 2 .5 .5*8 4

*** 2 2

*** : La división ya no es posible ya que se debe dividir hasta que el resultado obtenido sea menor que la base.
El resultado del numero 20 decimal a base Octal por lo tanto es 24, ya que se toman en orden inverso, el código lo hice de la siguiente manera pero solamente me funciona cuando de la primer división el resultado es menor que la base, por ejemplo si me convierte el numero 50 a base 8 ya que el resultado de la división es 6.25 y es menor que la base "8" debe utilizar solamente funciones sencillas como if,while,do while, espero que me puedan ayudar y muchas gracias por su ayuda, en verdad.

Por favor si no me di a entender, favor de contactarme de verdad me es muy urgente terminar este programa, mi correo es [email protected], gracias amigos.


Cita:

#include<stdio.h>
#include<stdlib.h>

float fraccion(float resultado)
{
int n;
n=resultado;

return resultado-n;
}

int entero(float resultado)
{
return resultado;
}


main()
{
int numero;
float base;
float resultado;
int digitob;


printf("Ingrese el numero en base 10 que desea convertir\n");
scanf("%i",&numero);

printf("Ahora ingrese la base\n");
scanf("%f",&base);


do
{
resultado=numero/base;

digitob=fraccion(resultado)*base;
}
while(entero(resultado)>base);

printf("El resultado es%i%i\n",entero(resultado),digitob);
}

Phicar
09 de Febrero del 2010
Hola Bro!, pues mira usa módulo(a%b)...la conversión es dividiendo y almacenando lo que sobra...te dejo un ejemplo
public class conver{
public static String alfa = \\\"0123456789ABCDEF\\\";
public static void main(String args[]){
try{
if(args[0].equalsIgnoreCase(\\\"-c\\\"))
System.out.println(DecTo(Integer.parseInt(args[1]),Integer.parseInt(args[2])));
else if(args[0].equalsIgnoreCase(\\\"-d\\\"))
System.out.println(BasToDec(args[1],Integer.parseInt(args[2])));
else{
String tmp = args[876];
return;
}
}catch(Exception phicar){
System.err.println(\\\"Paila ñero\\\");
return;
}
}
public static String DecTo(int a,int b){
String res = \\\"\\\"+alfa.charAt(a%b);
while((a/=b)>0)
res = alfa.charAt(a%b)+\\\"\\\"+res;
return res;
}
public static int BasToDec(String a,int base){
int res = 0,conta=0;
for(int n = a.length()-1;n>-1;n--)
res+=alfa.indexOf(a.charAt(n))*Math.pow(base,conta++);
return res;
}
}

Dodovrosky Medrano
09 de Febrero del 2010
Puedes hacerlo de forma recursiva creando una función que se llame a si misma:

void octal(int n, int b)
{
if(n<b)
cout<< n;
else{
octal(n/b);
cout<< n%b;
}

donde n = numero en base diez a convertir, b = base deseada