| 
	
		|  Autor | Tema: pasar de decimal a cualquier base menor de 10  (Leído 8,172 veces) |  
	| 
			| 
					
						| juanma31 
								
								 Desconectado 
								Mensajes: 5
								
								
								
								
								
								   | 
 
hola, tengo q hacer este ejercicio pero no m sale bien. lo unico q e conseguido es q m salga el numero al reves. alguien m podria decir q puedo hacer para darle la vuelta? o hacerlo de otra forma? no s puede usar void, gracias.
 #include <iostream>
 #include <cmath>
 
 using namespace std;
 
 int main()
 {
 unsigned numero,base,cociente,resto,contador=0,i,total,diez,num,decimal;
 cout<<"escribe el numero que quieres convertir: ";
 cin>>numero;
 cout<<"la base a la que quieres pasarlo: ";
 cin>>base;
 cociente=numero;
 
 while(cociente>=base)
 {
 resto=cociente%base;
 cociente=cociente/base;
 cout<<resto;
 contador++;
 }
 
 return 0;
 }
 
 
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| amchacon 
								       
								
								 Desconectado 
								Mensajes: 1.211
								
								   | 
 
¿Has dado pilas?
 Otra opcion es ir guardando los digitos en un array y mostrarlo en orden inverso.
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| noele1995 
								
								 Desconectado 
								Mensajes: 137
								
								   | 
 
1 - Utiliza las etiquetas geshi para el código... 2 - Tienes muchas variables que no usas, incluido contador que lo incrementas en el bucle pero nunca llegas a usarlo 3 - Aun imprimiendo el numero al revés te dejas el ultimo dígito, cuando es menor que la base y mayor que cero,cociente seria directamente el dígito que te falta. 4 - Como ya ha dicho amchacon un array es una buena opción aunque también podrías almacenarlo en una variable numérica     while(cociente > 0)    {		if(cociente >= base)		{			digito = cociente % base;			cociente = cociente / base;		}		else		{			digito = cociente;			cociente = 0;		}		num_en_base += digito * pow(10,contador); //""Desplaza"" el digito contador veces a la izquierda		contador++;    }
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| ivancea96 
								       
								
								 Desconectado 
								Mensajes: 3.412
								
								 
								ASMático
								
								
								
								
								
								     | 
 
Propongo otra opción: #include <iostream>#include <cmath> using namespace std; int main(){    unsigned numero=0,base=0,cociente=0, contador=1;    cout<<"Escribe el numero que quieres convertir: ";    cin>>numero;    cout<<"La base a la que quieres pasarlo: ";    cin>>base;    cociente=numero;     while(cociente>=base){        cociente/=base;        ++contador;    }    for(int i=contador;i>0;i--){        cociente=numero;        contador=i;        while(contador>1){            cociente/=base;            --contador;        }        cout << cociente%base;    }    return 0;}
 Aquí, contador viene a representar las veces que se puede dividir el número. Luego, va mostrando los restos, pero en orden inversa. |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Yoel Alejandro | 
 
Sólo como un aporte, tomando el código de ivance  y modificándolo para trabajar con arreglos creo que se ahorra un poco de cálculo ya que no será necesario encadenar un while dentro del for. La desventaja es que debemos crear dinámicamente un arreglo con una longitud igual a la cantidad esperada de cifras del número: #include <iostream>#include <cmath> using namespace std; int main(){   unsigned numero=0, base=0, cociente=0, contador=1;   cout<<"Escribe el numero que quieres convertir: ";   cin>>numero;   cout<<"La base a la que quieres pasarlo: ";   cin>>base;   cociente=numero;    /* cantidad de cifras en la base especificada */   int n = 1;   while ( cociente >= base ) {      cociente/=base;      ++n;   }   /* reservar arreglo de n cifras */   unsigned *cifras = new unsigned[n];   if ( cifras == NULL ) return -1;    for (int i = 0; i < n; i++) {      cifras[n - i - 1] = numero % base;      numero /= base;   }   for (int i = 0; i < n; i++)      cout << cifras[i];   cout << endl;    delete cifras;   return 0;}
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Saludos, Yoel.P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
 |  |  |  | 
			| 
					
						| leosansan 
								       
								
								 Desconectado 
								Mensajes: 1.314
								
								
								
								
								
								   | 
 
Los códigos propuestos hasta ahora no guardan el nuevo número como tal.
 Esta es mi propuesta que tendrá la limitación lógica, y escasa, de los dígitos que puede almacenar un long long int, y más si no es en base decimal ya que en estos casos los dígitos se disparan cuanto más baja es la base:
 ¡¡¡UUUPPPSSS, se me coló en C#include <stdio.h> int main(){    int num,i,base;    long long int resto=0,num0=1;    printf("Introduzca un numero : ");    scanf("%d",&num);    printf("Introduzca la base : ");    scanf("%d",&base);    for (i=0;num>=1 ;i++ ,num0*=10){        resto+=(num%base)*num0;        num=num/base;    }    printf("\n\n%lld\n\n",resto);    return 0;}
  ¡¡¡¡ Saluditos! ..... !!!! |  
						| 
								|  |  
								| « Última modificación:  2 Abril 2014, 23:44 pm por leosansan » |  En línea | 
 
 |  |  |  | 
			| 
					
						| juanma31 
								
								 Desconectado 
								Mensajes: 5
								
								
								
								
								
								   | 
 
gracias, el q m ha servido es el de ivancea96, se m ha olvidado decir q no podia usar arrays, graciass a todos  |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| leosansan 
								       
								
								 Desconectado 
								Mensajes: 1.314
								
								
								
								
								
								   | 
 
gracias, el q m ha servido es el de ivancea96, se m ha olvidado decir q no podia usar arrays, graciass a todos Sin arrays, más cortito pero haciendo uso de la librería math con un poco de mates y así nos ahorramos unas cuantas divisiones:
 Y para los seguidores del C con array:#include <iostream>#include <cmath> using namespace std; int main(){    int i,j,numero,base,digitos;    cout<<"Escribe el numero que quieres convertir: ";    cin>>numero;    cout<<"La base a la que quieres pasarlo: ";    cin>>base;    digitos= (int)(log(numero)/log(base));    cout <<numero<< " en base "<<base<< ": "<<endl;    for (i=digitos; i>=0 ;i-- ,numero%=j) {      j=pow(2,i);      cout <<" "<<numero/j;    }    return 0;} 
 #include <stdio.h>#include <math.h> int main(){    int base,i,j,num,digitos,resto;    printf("Introduzca un numero : ");    scanf("%d",&num);    printf("Introduzca la base : ");    scanf("%d",&base);    digitos= (int)(log(num)/log(base));    int nueva_base[digitos+1];    for (i=digitos;i>=0 ;i-- ,num/=base)        nueva_base[i]=num%base;    for (i=0;i<=digitos;i++)        printf("%d ",nueva_base[i]);    return 0;}
 ¡¡¡¡ Saluditos! ..... !!!! |  
						| 
								|  |  
								| « Última modificación:  3 Abril 2014, 10:26 am por leosansan » |  En línea | 
 
 |  |  |  | 
			| 
					
						| amchacon 
								       
								
								 Desconectado 
								Mensajes: 1.211
								
								   | 
 
Como veo que se ha convertido en un concurso, doy mi solución con pilas: #include <iostream>#include <stack> using namespace std; int main(){    int numero,base,cociente,resto;    stack<int> Pila;     cout<<"escribe el numero que quieres convertir: ";    cin>>numero;     cout<<"la base a la que quieres pasarlo: ";    cin>>base;     cociente=numero;     while(cociente>=base)    {        resto=cociente%base;        cociente=cociente/base;        Pila.push(resto);    }     Pila.push(cociente);     while (!Pila.empty())    {        cout<<Pila.top();        Pila.pop();    }    return 0;} 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| NikNitro! 
								       
								
								 Desconectado 
								Mensajes: 1.309
								
								 
								Galletaaa!!!
								
								
								
								
								
								     | 
 
No he querido mirar todas las soluciones, pero si no se puede usar arrays, lo que pienso es que (como vamos consiguiendo los valores menos significativos primero) empezar con un int resultado = 0; y en cada iteración sumarle el valor que calculamos x10^(num de iteración). (En caso de Hexadecimal o base mayor que 10 no valdría :s)  Saludos   |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Error programa que cambia un número de base 10 a cualquier base Programación C/C++
 | ERIK546 | 7 | 7,069 |  16 Mayo 2012, 03:59 am por ERIK546
 |  
						|   |   | [C] Decimal a base n, con n<10 Programación C/C++
 | edr89 | 8 | 4,852 |  24 Octubre 2013, 03:12 am por rir3760
 |  
						|   |   | pasar de decimal a cualquier base menor de 10 Programación C/C++
 | juanma31 | 9 | 5,377 |  24 Mayo 2014, 15:14 pm por leosansan
 |  
						|   |   | programa que cambie de base binaria a base decimal en C Programación C/C++
 | estudiante_1 | 1 | 3,338 |  23 Noviembre 2015, 02:37 am por Deivbid
 |  
						|   |   | Duda ejercicio C nº decimal pasar a otra base Programación C/C++
 | juanpalomo098 | 0 | 2,588 |  7 Diciembre 2016, 16:04 pm por juanpalomo098
 |    |