Examen 03

El examen es de carácter práctico y puede realizarse en una computadora donde se tenga instalado el Java Development Kit (JDK). El estudiante puede consultar de cualquier recurso o referencia que guste, sean hechos durante el curso, estén publicados en libros o en la web. En caso de reutilizar código que haya trabajado con otros compañeros, debe informarlo al profesor al iniciar el examen. Se dispone de dos horas para entregar la prueba y debe realizarse en forma estrictamente individual. Para esta prueba en particular no se permite emplear las clases java.math.BigInteger ni java.math.BigDecimal.

En Java, el valor entero positivo más grande almacenable en un tipo de datos primitivo (long) es 9,223,372,036,854,775,807. Suponga que una entidad bancaria le ha contratado para implementar un sistema que debe manejar correctamente cifras macroeconómicas. Se necesita una clase en Java que represente números enteros positivos de cualquier cantidad de dígitos. En la fase inicial de este proyecto usted debe construir esta clase y poder leer, imprimir y hacer sumas de números muy grandes, es decir, su solución debe hacer funcionar el siguiente programa:

]]>
Programa que suma una cantidad arbitraria de enteros de cualquier longitud para probar la clase Entero. Obtener código fuente.

El programa anterior permite al usuario ingresar una cantidad n de números enteros positivos de longitud arbitraria, y muestra el resultado de sumarlos. Los siguientes son ejemplos de ejecución de este programa.

Cantidad de enteros positivos a sumar: 2

Entero 1: 79905
Entero 2: 827

79905
  827
+++++
80732
Cantidad de enteros positivos a sumar: 3

Entero 1: 9223372036854775900
Entero 2: 10000000000000000000
Entero 3: 126456789

 9223372036854775900
10000000000000000000
           126456789
++++++++++++++++++++
19223372036981232689
Cantidad de enteros positivos a sumar: 4

Entero 1: 123456789012345678901234567890123456789
Entero 2: 10100100010001000010000010000
Entero 3: 987654321098765432109876543210987654321098765432109876543210
Entero 4: 13

                     123456789012345678901234567890123456789
                               10100100010001000010000010000
987654321098765432109876543210987654321098765432109876543210
                                                          13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
987654321098765432110000000000010100100010001000010000010012
Ejemplos de ejecución del programa

Evaluación

  1. [10%] Clase Entero completa y correcta. Representa correctamente el número para que pueda crecer arbitrariamente. Hace adecuado manejo de miembros estáticos y no estáticos.
  2. [20%] Método leer(): Lee correctamente enteros positivos de cualquier longitud del teclado (sugerencia: utilice el método next() de la clase Scanner). Retorna false en caso de leer algo que no es un entero positivo válido.
  3. [15%] Método toString(). Convierte el entero positivo en un String.
  4. [15%] Método digitos() retorna la cantidad de dígitos que componen al entero. Método digito(i) retorna el i-ésimo dígito del entero (contando de derecha a izquierda).
  5. [40%] Método e1.sumar(e2) retorna un nuevo entero resultado de sumar el entero e1 con el entero e2. Sugerencia: aproveche el método digito(i) solicitado en el punto anterior.
  6. [10% Opcional] Inserta un caracteres separadores de miles a la hora de convertir el entero a un String (método toString()), de tal forma que hace la impresión del número más legible para el usuario.

Para presentar su solución, suba su archivo Entero.java a Mediación Virtual en la asignación con nombre Examen03.