elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Entero de 10 elevado a 1000
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Entero de 10 elevado a 1000  (Leído 8,195 veces)
lluk

Desconectado Desconectado

Mensajes: 106


C++Programming


Ver Perfil
Entero de 10 elevado a 1000
« en: 8 Mayo 2011, 14:52 pm »

Hola, estoy haciendo un problema que necesito un entero tal que:

n< 10 a la 6
y otro tal que
n< 10 a la 1000

me podéis decir que tipo tendría que usar?
con el long long no me entra

gracias de antemano

EDITO: encontré otra forma de hacer el programa, pueden cerrar el post


« Última modificación: 8 Mayo 2011, 15:08 pm por lluk » En línea

lluk

Desconectado Desconectado

Mensajes: 106


C++Programming


Ver Perfil
Re: Entero de 10 elevado a 1000
« Respuesta #1 en: 8 Mayo 2011, 15:47 pm »

para no abrir tema nuevo,
saben como puedo hacer para escribir por ejemplo:
100000000
y que cada numero se guarde en un a posicion de un arreglo distinta?


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Entero de 10 elevado a 1000
« Respuesta #2 en: 8 Mayo 2011, 17:49 pm »

Creo que primero necesitas aprender sobre numeración en el ordenador.

Con enteros NO te va a entrar, usa floats (doubles si eso)

Con un long, suponiendo que el int es de 32, el long es de 64, lo que da 2^63 (a la 64 si es unsigned), que es mucho menor que 10^63, ya ni te digo 10^1000

Para tu segunda duda, hay mil formas, una de ellas utilizar sprintf para imprimir el número a una cadena de carácteres,
« Última modificación: 8 Mayo 2011, 17:51 pm por Akai » En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Entero de 10 elevado a 1000
« Respuesta #3 en: 8 Mayo 2011, 17:52 pm »

O puede usar strings para representar los enteros ( e implementar todas las op basicas )... double pierde precision a lo tonto en numeros grandes... y en una de esas busca precision numerica...
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Entero de 10 elevado a 1000
« Respuesta #4 en: 8 Mayo 2011, 20:15 pm »

Más que strings, para programar BigInts la práctica más extendida es usar vectores de enteros, de forma que en cada posición no se guarda un único dígito, sino varios de ellos, permitiendo aprovechar las operaciones de las variables nativas del lenguaje y además haciendo el cálculo de forma mucho más eficiente.

He picado un ejemplo para poder hacer potencias. No lo he testeado así que quizá tenga algún bug, pero la idea en sí creo que se entiende con el código.
Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4. #include <iomanip>
  5. using namespace std;
  6.  
  7. typedef long long ll;
  8. typedef vector<ll> VL;
  9.  
  10. const ll base = 1000000000;
  11.  
  12. class BigInt {
  13.    public:
  14.        VL v;
  15.        int signo;
  16.  
  17.        BigInt() {
  18.            v = VL(1, 0);
  19.            signo = 1;
  20.        }
  21.        BigInt(ll x) {
  22.            do {
  23.                v.push_back(x%base);
  24.                x /= base;
  25.            } while (x > 0);
  26.            signo = 1;
  27.        }
  28.        void operator*=(const BigInt& b) {
  29.            BigInt c;
  30.            c.v.resize(v.size() + b.v.size(), 0);
  31.            c.signo = signo*b.signo;
  32.            for (int i = 0; i < v.size(); ++i) {
  33.                for (int j = 0; j < b.v.size(); ++j) {
  34.                    int k = i + j;
  35.                    c.v[k] += v[i]*b.v[j];
  36.                    while (c.v[k] >= base) {
  37.                        c.v[k + 1] += c.v[k]/base;
  38.                        c.v[k++] %= base;
  39.                    }
  40.                }
  41.            }
  42.            int i;
  43.            for (i = c.v.size() - 1; i > 0 and c.v[i] == 0; --i);
  44.            c.v.resize(i + 1);
  45.            *this = c;
  46.        }
  47.        BigInt pow(ll k) {
  48.            if (k == 0) return BigInt(1);
  49.            BigInt res = this->pow(k >> 1);
  50.            res *= res;
  51.            if (k&1) res *= (*this);
  52.            return res;
  53.        }
  54.        friend ostream &operator<<(ostream &out, BigInt &b) {
  55.            if (b.signo < 0) out << '-';
  56.            int i = b.v.size() - 1;
  57.            out << b.v[i];
  58.            for (--i; i >= 0; --i) out << setw(9) << setfill('0') << b.v[i];
  59.            return out;
  60.        }
  61. };
  62.  
  63. int main() {
  64.    BigInt x(10);
  65.    x = x.pow(1000);
  66.    cout << x << endl;
  67. }
  68.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Progress Bar ........... No me entero.
Programación Visual Basic
el_trocha 1 1,717 Último mensaje 17 Septiembre 2007, 19:53 pm
por LeandroA
Divisores de un entero.
Java
*-.Sub-Vorbio.-* 3 14,287 Último mensaje 12 Noviembre 2008, 00:01 am
por juancho77
Elevado a la potencia en JS
Desarrollo Web
Ali Baba 6 5,561 Último mensaje 8 Marzo 2017, 14:38 pm
por flacc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines