Autor
|
Tema: pasar de decimal a cualquier base menor de 10 (Leído 7,505 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:#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; }
¡¡¡UUUPPPSSS, se me coló en C ¡¡¡¡ 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:#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; }
Y para los seguidores del C con array:#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
|
6,618
|
16 Mayo 2012, 03:59 am
por ERIK546
|
|
|
[C] Decimal a base n, con n<10
Programación C/C++
|
edr89
|
8
|
4,403
|
24 Octubre 2013, 03:12 am
por rir3760
|
|
|
pasar de decimal a cualquier base menor de 10
Programación C/C++
|
juanma31
|
9
|
4,936
|
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,084
|
23 Noviembre 2015, 02:37 am
por Deivbid
|
|
|
Duda ejercicio C nº decimal pasar a otra base
Programación C/C++
|
juanpalomo098
|
0
|
2,352
|
7 Diciembre 2016, 16:04 pm
por juanpalomo098
|
|