Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse. - Mayo 15, 2008, 11:31:44
Boton Buscar
Inicio Ayuda Calendario Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: para pensar un poco. ( HugeInteger ) 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: para pensar un poco. ( HugeInteger )  (Leído 51 veces)
lann
Habitual
*****
Desconectado Desconectado

Mensajes: 292


maamamma

migue1990@gmail.com
Ver Perfil Email
« en: Abril 10, 2008, 09:11:09 »

Un pequeño ejercicio casi terminado, pueden crear la funcion add?

(HugeInteger Class) Create a class HugeInteger that uses a 40-element array of digits to store integers as large as 40 digits each. Provide member functions input, output, add and substract. For comparing HugeInteger objects, provide functions isEqualTo, isNotEqualTo, isGreaterThan, isLessThan, isGreaterThanOrEqualTo and isLessThanOrEqualToeach of these is a "predicate" function that simply returns TRue if the relationship holds between the two HugeIntegers and returns false if the relationship does not hold. Also, provide a predicate function isZero. If you feel ambitious, provide member functions multiply, divide and modulus.

la funcion input y output esta facil ya estan hechas, el code esta aqui:

Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
http://slexy.org/view/s2cW0kqav1


obvio no estan definidas todas las funciones.

faltan hacer las funciones aritmeticas como add, substract, multiply, etc.

creo que debe haber una solucion sumamente sencilla que sea recursiva pero yo para la recursividad... ni hablar... bueno la solucion iterativa en verdad que si esta para pensarse.

traten de hayarle solucion a cualquiera de las operaciones aritmeticas con los objetos HugeInteger, no es tan facil como parece, si son ambiciosos y buenos con la recursividad traten de hacerlo con solucion iterativa si son malos con la recursividad ( como yo ) haganlo recursivo =p
« Última modificación: Abril 10, 2008, 09:14:15 por lann » En línea

am
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 177



Ver Perfil
« Respuesta #1 en: Abril 10, 2008, 10:26:03 »

Buenas

Una respuesta media rapida
Para sumar
Código:
void suma(int a[], int b[], int (*rdo)[]);
    int i, acarreo = 0;
    for(i = MAX; i; --i){
        rdo[i] = ((a[i] + b[i]) % 10) + acarreo;
        acarreo = a[i] + b[i] / 10;
    }
}

La multiplicacion tendrias que llamar b veces a suma. Tu mayor problema aca seria ir decrementando b
En resta el mayor problema seria hacer el calculo si b[i ] > a[i ]. Dividir seria lo mismo que multiplicar (salvado ciertas cosillas) pero en vez de sumar, restas y contas las veces que podes restar

PD: Espero que te haya podido ayudar y no pienses que va a funcionar mi codigo porque no creo jeje

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Anibal784
Recien Llegado
*
Desconectado Desconectado

Mensajes: 22

ajr784@hotmail.com
Ver Perfil WWW Email
« Respuesta #2 en: Abril 11, 2008, 06:06:48 »

    Para la multiplicación es bastante ineficiente tu solución (si bien es la más rápida que sale), yo optaría por hacer... a ver, cómo multiplica uno números de más de 1 cifra.

Código:
123
x 32
-------
  2 4 6
3 6 9 -
---------
3 9 3 6

Más o menos así, primero multiplica cada dígito por el número de abajo por el número de arriba, cada vez que el dígito está más a la izquierda se va multiplicando por 10 y después se suman todos los resultados para obtener el resultado final. Éste supone una optimización (capaz que no es la mejor) ya que un número de 40 cifras es un número muy grande, con ésta solución como mucho harías 40 multiplicaciones de 1 sólo dígito + 40 sumas. Otra pequeña optimización es ver cuál de los dos números tiene mayor cantidad de dígitos para ponerlo en la parte de abajo (ahorra), y otra si es cero no hacer el cálculo (0 x n = 0). El código se los debo porque ando sin tiempo.
En línea

"UNIX is simple. It just takes a genius to understand its simplicity."
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 177



Ver Perfil
« Respuesta #3 en: Abril 11, 2008, 10:23:06 »

Buenas

    Para la multiplicación es bastante ineficiente tu solución (si bien es la más rápida que sale), yo optaría por hacer... a ver, cómo multiplica uno números de más de 1 cifra.
Por eso dije esto:
Una respuesta media rapida
porque era la que primero se me vino a la cabeza. Obviamente no es la mejor

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: para pensar un poco. ( HugeInteger ) « anterior próximo »
Ir a:  
Novedades, Dudas, Comentarios Y Sugerencias, Top 100, Off-Topic, Revista E-Zine, Revista E-Zine, Sistemas operativos libres. , HacK GeneraL, Phreaking, Bug y Exploits, Networking & Wireless, Overclocking, Refrigeracion y demas, Hardware, Electronica Y Robotica, Hack para newbies, Todo Messenger, Troyanos y virus, Programacion, Programacion para webmasters, Software, Cracks & Serialz, P2p, Bittorrent, Elinks, Diseño Grafico, Juegos PC, Mp3, Multimedia, Peliculas Divx, Juegos, Humor y Adultos. (Diversion), Paginas Webs Recomendadas, Videos,


Zona-Musical Juegos online Juego Gratis10 Solucion Hosting Videos De Musica 1juegogratis Dragonjar
Noticias
 Juegos De Coche juegos gratis online juegos Los Foros De Sexe Gratuit Sexo Duro Tierra Messenger Trucos
Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC