Título: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: elkiy en 26 Mayo 2013, 03:25 am
Hola amigos, bueno el titulo lo dice todo, hice un programa que puede leer un numero binario de hasta 10 caracteres y los pasa a base 10. bueno espero que alguno le sirva, o simplemente le guste mi codigo y como he trabajo, siempre separando la interfaz de la implementacion. Bueno las partes: MAIN.CPP#include "funciones.h" int main() { funciones Objetollamador; Objetollamador.PedirNumero(); return 0; }
FUNCIONES.CPP#include <iostream> using std::cout; using std::endl; using std::cin; #include "funciones.h" void funciones::PedirNumero() { int Numero; int NumeroCaracteres; cout << "Solo se pueden escribir numeros que contengan 0 y 1 (que sea un numero binario)" " y el programa acepta un numero con 10 caracteres o menos, de lo contrario\n" " el resultado no sera el deseado.\n"; cout << "Escriba su numero:\t"; cin >> Numero; cout << "Escriba la cantidad de caracteres que tiene su numero:\t"; cin >> NumeroCaracteres; cout << "Obteniendo valores...\n"; funciones::ExaminarNumero(Numero,NumeroCaracteres); } int funciones::ExaminarNumero(int Numero, int NumeroCaracteres) { int NumeroCaracteres1 = NumeroCaracteres; int Numero1 = Numero; if (Numero1 <= 9999999999) { if (Numero1 > 999999999) // si tiene 10 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division10= division10 * 512; division9= division9 * 256; division8= division8 * 128; division7= division7 * 64; division6= division6 * 32; division5= division5 * 16; division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5 + division6 + division7 + division8 + division9 + division10); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 1000000000) & (Numero1 > 99999999)) // si tiene 9 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division9= division9 * 256; division8= division8 * 128; division7= division7 * 64; division6= division6 * 32; division5= division5 * 16; division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5 + division6 + division7 + division8 + division9); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 100000000 & Numero1 > 9999999) ) // si tiene 8 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division8= division8 * 128; division7= division7 * 64; division6= division6 * 32; division5= division5 * 16; division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5 + division6 + division7 + division8); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 10000000 & Numero1 > 999999) ) // si tiene 7 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division7= division7 * 64; division6= division6 * 32; division5= division5 * 16; division4= division4 * 8 ; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5 + division6 + division7); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 10000000 & Numero1 > 99999 )) // si tiene 6 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division6= division6 * 32; division5= division5 * 16; division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5 + division6); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 100000 & Numero1 > 9999)) // si tiene 5 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division5= division5 * 16; division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4 + division5); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 10000 & Numero1 > 999)) // si tiene 4 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division4= division4 * 8; division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3 + division4); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 1000) & (Numero1 > 99)) // si tiene 3 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division3= division3 * 4; division2= division2 * 2; division1= division1 * 1; variable = (division1 + division2 + division3); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if ((Numero1 < 100 & Numero1 > 9) ) // si tiene 2 caracteres { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division2= division2 * 2; division1= division1* 1; variable = (division1 + division2); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } if (Numero1 < 10 ) // si tiene 1 caracter { int variable; int division1; int division2; int division3; int division4; int division5; int division6; int division7; int division8; int division9; int division10; division10 = Numero1 / 1000000000; variable = Numero1 % 1000000000; division9 = variable / 100000000; variable = variable % 100000000; division8 = variable / 10000000; variable = variable % 10000000; division7 = variable / 1000000; variable = variable % 1000000; division6= variable / 100000; variable = variable % 100000; division5 = variable / 10000; variable = variable % 10000; division4 = variable / 1000; variable = variable % 1000; division3= variable / 100; variable = variable % 100; division2= variable / 10; variable = variable % 10; division1 = variable / 1; variable = variable % 1; //Pasando a base 10. division1= division1 * 1 ; variable = (division1); cout << "NUMERO CONVERTIDO EN: " << variable << endl; cin.get(); cin.get(); } } else { cout << "El numero ingresado excede el maximo de caracteres permitidos.\n"; } return 0; }
FUNCIONES.Hclass funciones { public: void PedirNumero(); int ExaminarNumero(int,int); };
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: flony en 26 Mayo 2013, 04:58 am
no soy un especialista pero se me hace que se puede hacer mas corto el code...aplicando un for y una serie para la multiplicación
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: satu en 26 Mayo 2013, 14:23 pm
Buenas!! Acabo de hacer esta versión que acepta cualquier longitud y es mucho más corto. He probado algunos valores pero puede que tenga errores. main.cpp#include "Binario.h" int main() { string numero; double resultado = 0; cout << "Introduce el número: "; cin >> numero; Binario b(numero); resultado = b.convert(); if(resultado != -1) { cout << "El decimal de " << numero << " es " << resultado << endl << endl; } else { cout << "No has introducido un valor válido" << endl << endl; } cin.sync(); cout << "Pulsa Enter para salir...." << endl; cin.get(); return 0; }
Binario.cpp#include "Binario.h" Binario::Binario(string num) { binario = num; } bool Binario::isValid() { for(unsigned i = 0; i < binario.size(); i++) { if(binario[i] != '0' && binario[i] != '1') { return false; } } return true; } string Binario::reverseString() { string cad = string(binario.rbegin(), binario.rend()); return cad; } double Binario::convert() { double result = 0; if(isValid()) { string reversed = reverseString(); for(unsigned i = 0; i < reversed.size(); i++) { if(reversed[i] == '1') { result += pow(2, i); } } return result; } return (-1); }
Binario.h#include <iostream> #include <string> using namespace std; class Binario { string binario; public: Binario(string num); bool isValid(); string reverseString(); double convert(); };
Por supuesto se aceptan críticas :P Saludos
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: rir3760 en 26 Mayo 2013, 14:51 pm
En C y C++ se puede utilizar la función strtol para obtener el numero representado por una cadena. En C++ seria mas o menos así: cout << "Numero: "; string palabra; cin >> palabra; cout << palabra << " ==> " << strtol(palabra.c_str(), 0, 2) << endl;
El tercer argumento de la función es la base (2 a 36) de la representación en cadena. Mas información sobre la mentada función en sitios como "C Plus Plus". Un saludo
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: elkiy en 26 Mayo 2013, 15:21 pm
bueno con respecto a lo de for, es un ejercicio de un libro, donde me decia que no use for, con respecto a usar string despues no se puede dividir
S2
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: leosansan en 26 Mayo 2013, 17:21 pm
Hola amigos, bueno el titulo lo dice todo, hice un programa que puede leer un numero binario de hasta 10 caracteres y los pasa a base 10.
Suponiendo que no vamos a hacer uso de funciones ya implementadas en C/C++ que lo harían de forma automática, no sé dónde me he perdido, pero pedazo de código para hacer eso me parece, cuanto menos, excesivo. No he pillado el por qué de hacer un proyecto con tres ficheros que te cambas. Creo que sinceramente me he perdido algo en la explicación o en el objetivo.
Porque si lo que vamos a hacer es un código que pase a decimal números en binario de no más de diez caracteres, a mí con lo que sigue me sobra, y aún así sé que es muy mejorable (por ejemplo, se podría calcular sin usar strlen la longitud de la cadena, pero estoy un poco vago hoy):#include <iostream> #include <cstring> using namespace std; int main() { int i,n=0,longi,potencias_dos[]={1024,512,256,128,64,32,16,8,4,2,1}; char Numero[10]={0}; cout << "Escriba en numero en binario: "; cin >> Numero; longi=strlen (Numero); for (i=0;i<Numero[i]!='\0';i++) n+=(Numero[i]-'0')*potencias_dos[11-longi+i]; cout << endl<<n; return 0; }
Sí, ya sé que debí usar fgets, lo usaré en el próximo código.
Y respecto a lo comentado por satu:Buenas!!
Acabo de hacer esta versión que acepta cualquier longitud y es mucho más corto.
lamento recordarle que no es así, pues estas limitado al número de dígitos capaz de calcular/manejar en C/C++, que anda por las quince cifras si mal no recuerdo, toda vez que estas haciendo uso de la función ""pow" en una parte del código. Y las primeras potencias de 2 son:
0 1 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1,024 11 2,048 12 4,096 13 8,192 14 16,384 15 32,768 16 65,536 17 131,072 18 262,144 19 524,288 20 1,048,576 21 2,097,152 22 4,194,304 23 8,388,608 24 16,777,216 25 33,554,432 26 67,108,864 27 134,217,728 28 268,435,456 29 536,870,912 30 1,073,741,824 31 2,147,483,648 32 4,294,967,296 33 8,589,934,592 34 17,179,869,184 35 34,359,738,368 36 68,719,476,736 37 137,438,953,472 38 274,877,906,944 39 549,755,813,888 40 1,099,511,627,776 41 2,199,023,255,552 42 4,398,046,511,104 43 8,796,093,022,208 44 17,592,186,044,416 45 35,184,372,088,832 46 70,368,744,177,664 47 140,737,488,355,328 48 281,474,976,710,656 49 562,949,953,421,312 50 1,125,899,906,842,624 51 2,251,799,813,685,248 52 4,503,599,627,370,496 53 9,007,199,254,740,992 54 18,014,398,509,481,984 55 36,028,797,018,963,968 56 72,057,594,037,927,936 57 144,115,188,075,855,872 58 288,230,376,151,711,744 59 576,460,752,303,423,488 60 1,152,921,504,606,846,976 61 2,305,843,009,213,693,952 62 4,611,686,018,427,387,904 63 9,223,372,036,854,775,808 64 18,446,744,073,709,551,616 65 36,893,488,147,419,103,232 66 73,786,976,294,838,206,464 67 147,573,952,589,676,412,928 68 295,147,905,179,352,825,856 69 590,295,810,358,705,651,712 70 1,180,591,620,717,411,303,424 71 2,361,183,241,434,822,606,848 72 4,722,366,482,869,645,213,696 73 9,444,732,965,739,290,427,392 74 18,889,465,931,478,580,854,784 75 37,778,931,862,957,161,709,568 76 75,557,863,725,914,323,419,136 77 151,115,727,451,828,646,838,272 78 302,231,454,903,657,293,676,544 79 604,462,909,807,314,587,353,088 80 1,208,925,819,614,629,174,706,176 81 2,417,851,639,229,258,349,412,352 82 4,835,703,278,458,516,698,824,704 83 9,671,406,556,917,033,397,649,408 84 19,342,813,113,834,066,795,298,816 85 38,685,626,227,668,133,590,597,632 86 77,371,252,455,336,267,181,195,264 87 154,742,504,910,672,534,362,390,528 88 309,485,009,821,345,068,724,781,056 89 618,970,019,642,690,137,449,562,112 90 1,237,940,039,285,380,274,899,124,224 91 2,475,880,078,570,760,549,798,248,448 92 4,951,760,157,141,521,099,596,496,896 93 9,903,520,314,283,042,199,192,993,792 94 19,807,040,628,566,084,398,385,987,584 95 39,614,081,257,132,168,796,771,975,168 96 79,228,162,514,264,337,593,543,950,336 97 158,456,325,028,528,675,187,087,900,672 98 316,912,650,057,057,350,374,175,801,344 99 633,825,300,114,114,700,748,351,602,688 ¡Cuidado, que te caes!
He marcado en rojo hasta dónde creo se podría calcular sin usar librerías externas, si hacemos uso de la propia librería de números más grandes del C/C++, la inttypes
Y un código como el que plantea satu, pero recordando que el número de dígitos del número binario a introducir está limitado por lo antes expuesto, sería:#include <iostream> #include <cstring> #include <cstdio> #include <cinttypes> #include <cmath> using namespace std; int main() { uint64_t n=0; register int i,j,longi; char numero[71={0}; cout << "Entre numero entero en base 2:\t"; fgets (numero, 20, stdin); longi=strlen (numero); for (j=0;j<longi-1;j++) n+=(numero[j]-'0')*pow(2,longi-2-j); cout <<"En decimal es "<< n; return 0; }
Hecho a toda pastilla y, por tanto a mejorar todavía. Y vuelvo al comienzo, no sé dónde me perdí para que salieran esos códigos tan, como decirlo, tan complejos a simple vista. Saluditos!. .... ..(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/lion14peque_zps1d213b80.jpg)
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: CCross en 26 Mayo 2013, 18:56 pm
leosansan me gusto el metodo que usas para pasar de binario a decimal pero no comprendo en que consiste esta operación. (numero[j]-'0')
Que hace esto exactamente ya que si multiplicas un número por cero el resultado es cero por que no directamente pero luego me di cuenta que al quitarle eso obtengo resultados incoherentes. Saludos :rolleyes:
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: leosansan en 26 Mayo 2013, 19:24 pm
leosansan me gusto el metodo que usas para pasar de binario a decimal pero no comprendo en que consiste esta operación. (numero[j]-'0')
Que hace esto exactamente ya que si multiplicas un número por cero el resultado es cero por que no directamente pero luego me di cuenta que al quitarle eso obtengo resultados incoherentes. La explicación es que numero[j] está declarado como char y para pasarlo a entero le tengo que restar su valor en ascii, que sería restarle 48 o su equivalente que es '0'. Ese es todo el misterio que encierra esa operación, convertir un caracter ascii a int. Si lo que hubiese necesitado hubiera sido convertir el array numero, declarado como char, a int hubiese podido utilizar una función como atoi u otra de la clase string, que habría sido otra forma de haber declarado a la variable numero en lugar de char, y posiblemente más cómoda. En realidad salió el código que salió porque no me dí cuenta y lo hice en C, pero al ir a postearlo me fijé que estaba en C++ e hice una conversión "rápida", de ahí mi comentario de que es muy mejorable.
Espero haberme explicado meridianamente bien, si no es que fui torpe ;)
Saluditos!. ... .(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: CCross en 26 Mayo 2013, 22:12 pm
Que despistado soy como no me pude dar cuenta era obvio gracias por la aclaración mejor no pudo ser se agradece.
Saludos ;D
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: rir3760 en 27 Mayo 2013, 15:28 pm
por ejemplo, se podría calcular sin usar strlen la longitud de la cadena, pero estoy un poco vago hoy No es necesario multiplicar cada dígito por la potencia de 2 correspondiente, en su lugar antes de procesar cada dígito se multiplica el acumulado por la base: #include <iostream> using std::cin; using std::cout; using std::endl; int main() { char binario[11]; cout << "Escriba un numero en binario: "; cin >> binario; int num = 0; for (int i = 0; binario[i] != '\0'; i++) num = num * 2 + binario[i] - '0'; cout << binario << " == " << num << endl; return 0; }
lamento recordarle que no es así, pues estas limitado al número de dígitos capaz de calcular/manejar en C/C++, que anda por las quince cifras si mal no recuerdo, toda vez que estas haciendo uso de la función ""pow" en una parte del código. Ya que no es necesario el uso de la función pow para pasar de binario a decimal la limitante es el numero de bits del acumulador, si se utiliza una variable de tipo int se tienen como mínimo 16, 32 en el caso del tipo long. Un saludo
Título: Re: El codigo de mi programa que pasa numeros binarios a base 10
Publicado por: leosansan en 29 Mayo 2013, 12:35 pm
Ya que no es necesario el uso de la función pow para pasar de binario a decimal la limitante es el numero de bits del acumulador, si se utiliza una variable de tipo int se tienen como mínimo 16, 32 en el caso del tipo long.
Tal como indique, sólo recordaba por encima el número de dígitos capaz de manejar C/C++, que comenté estaban entre 15 y 20. Preciso, entre 10 de los enteros y enteros largos y 19 de los long long en mi ordenador, claro:(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/enteroymaslimites_zps62d73953.jpg) Que creo que cuasi se corresponden con los 16 y 32 bits que comentabas y las correspondientes potencias de 2, toda vez que mi int y long int es de cuatro bytes, o sea 32 bits y mi long long int es de 8 bytes, es decir 64 bits.(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/tiposenteros_zps9d2a0a33.jpg) Por cierto,calculadas con pow y con iguales resultados que sin pow por lo que deduzco que la función implementada en C es análoga a la acumulativa expuesta por tí.
Conclusión, saquemos alguna conclusión de esta diatriba: C/C++ se queda "cortito" de manera estándar en el manejo de dígitos, muy lejos de la cantidad de dígitos que muestra la figura de mi post anterior con las potencias de 2, por cierto no calculadas con ninguna librería auxiliar o programa matemático sino con Python, aunque reconozco que no me he molestado en comprobar la bondad de dichos resultados ya que para esas cosas manejo otros programas más específicos.
Saluditos!. ... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif) P.D:Sniff,Sniff >:( me da nostalgia al contemplar la" potencia" de programas como Matlab o Mathematica, que sin despeinarse dan, y lo pongo cortito para que no ocupe mucho: 2^10000= 1995063116880758384883742162683585083823496831886192454852008949852943 8830221946631919961684036194597899331129423209124271556491349413781117 5937859320963239578557300467937945267652465512660598955205500869181933 1154250860846061810468550907486608962488809048989483800925394163325785 0621568309473902556912388065225096643874441046759871626985453222868538 1616943157756296407628368807607322285350916414761839563814589694638994 1084096053626782106462142733339403652556564953060314268023496940033593 4316651459297773279665775606172582031407994198179607378245683762280037 3028854872519008344645814546505579296014148339216157345881392570953797 6911927780082695773567444412306201875783632550272832378927071037380286 6393031428133241401624195671690574061419654342324638801248856147305207 4319922596117962501309928602417083408076059323201612684922884962558413 1284406153673895148711425631511108974551420331382020293164095759646475 6010405845841566072044962867016515061920631004186422275908670900574606 4178569519114560550682512504060075198422618980592371180544447880729063 9524254833922198270740447316237676084661303377870603980341319713349365 4622700563169937455508241780972810983291314403571877524768509857276937 9264332215993998768866608083688378380276432827751722736575727447841122 9438973381086160742325329197481312019760417828196569747589816453125843 4135959862784130128185406283476649088690521047580882615823961985770122 4070443305830758690393196046034049731565832086721059133009037528234155 3974539439771525745529051021231094732161075347482574077527398634829849 8340756937955646638621874569499279016572103701364433135817214311791398 2229838458473344402709641828510050729277483645505786345011008529878123 8947392869954083434615880704395911898581514577917714361969872813145948 3783202081474982171858011389071228250905826817436220577475921417653715 6877256149045829049924610286300815355833081301019876758562343435389554 0917562340084488752616264356864883351946372037729324009445624692325435 0400678027273837755376406726898636241037491410966718557050759098100246 7898801782719259533812824219540283027594084489550146766683896979968862 4163631337639390337345580140763674187771105538422573949911018646821969 6581651485130494222369947714763069155468217682876200362777257723781365 3316111968112807926694818872012986436607685516398605346022978715575179 4738524636944692308789426594821700805112032236549628816903573912136833 8393591756418733850510970271613915439590991598154654417336311656936031 1222499379699992267817323580231118626445752991357581750081998392362846 1524988108896023224436217377161808635701546848405862232979285387562348 6556440536962622018963571028812361567512543338303270029097668650568557 1575055167275188991941297113376901499161813151715440077286505731895574 5092033018530484711381831540732405331903846208403642176370391155063978 9000742853672196280903477974533320468368795868580237952218629120080742 8195513179481576244482985184615097048880272747215746881315947504097321 1508049819045580341682694978714131606321068639151168177430479259670937 6
|