Sie sind auf Seite 1von 7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

JAVA, PROGRAMACIN, TUTORIAL

CLCULO DE
GRANDES
NMEROS
SUMA Y
MULTIPLICACIN
DE ARRAYS
EN JAVA
Alguna vez te has preguntado
cmo ciertas aplicaciones de
calculadora pueden operar con
nmeros muy grandes? Si
casualmente habis programado
en Java o C/C++, sabis que los
tipos primitivos de datos numricos
tienen una longitud limitada. Por
ejemplo, los tipos numricos
enteros en Java:
TIPO DE

N DE

DATO

BYTES

RANGO VALORES

NUMRICO
byte

-128 a 127

short

-32768 a 32767

int

-2147483648 a
2147483647

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

1/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

TIPO DE

N DE

DATO

BYTES

RANGO VALORES

NUMRICO
long

-9223372036854775808
a
9223372036854775807

Aunque como podemos observar,


el tipo long nos permite trabajar
con nmeros bastante grandes, no
son nada ms que cifras irrisorias
comparadas con nmeros usados
en simulaciones de laboratorio. Por
ejemplo, clculos astronmicos,
computacin numrica, bsqueda
de nmeros primos
Lo cual nos lleva al siguiente punto.
El truco para simular nmeros
ridculamente grandes, viene de la
mano de los arrays. En este caso,
un array consistir en una matriz
unidimensional compuesta por
nmeros naturales. Colocando
cada cifra de cada nmero a
calcular en una posicin de cada
vector, podemos crear un
algoritmo que genere un array
resultado a partir de los 2
anteriores dada una operacin
aritmtica. En este caso, he elegido
la suma y la multiplicacin.

Consideraciones previas
1. Por cuestiones de comodidad,
voy a revertir el orden de las
cifras de un nmero, tal que:
1 int[]a=newint[]{3,

De este modo, la visualizacin


del ujo del programa ser
ms sencilla.
2. Como consecuencia del
apartado anterior, el nmero
devuelto estar del revs.
Mediante un bucle inverso se

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

2/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

mostrar el resultado en su
orden propio.

Suma
Algoritmo:
1. Dados 2 nmeros naturales
positivos, se cumple la
condicin de que el resultado
de su suma tendr, como
mucho, 1 cifra ms que el
sumando ms grande.
Declarar array con la longitud
ms grande, ms 1.
2. Nos colocamos en la posicin
primera de cada array.
Inicializamos la suma al valor
de la posicin del array
resultado, para contabilizar el
acarreo.
3. Acumular el valor del primer
array, mientras su longitud no
se haya excedido.
4. Acumular el valor del segundo
array, mientras su longitud no
se haya excedido.
5. Asignar a la posicin actual del
array resultado, el resto de
divir la suma entre 10.
6. Acumular en la posicin
siguiente el acarreo actual, es
decir, el cociente de dividir la
suma entre 10.
7. Si hemos llegado al nal del
array resultado, FIN. Si no,
sumar 1 a la posicin actual y
volver al paso 2.
Funcin:
1
2
3
4
5
6
7
8
9
10
11

publicstaticint[]sumar
intlongitud;

if(b.length>a.length
elselongitud=a.length

int[]r=newint[longitud
for(inti=0;i<r

for(inti=0;i<r
intsuma=r[i];

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

3/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

12
13
14
15
16
17
18
19
20
21

if(i<a.length)
if(i<b.length)

r[i]=(suma%10
r[i+1]+=suma
}

returnr;
}

Multiplicacin
Algoritmo:
1. Dados 2 nmeros naturales
positivos, se cumple la
condicin de que el resultado
de su multiplicacin tendr,
como mucho, 1 cifra ms que
la suma de sus nmeros de
cifras. Declarar array con
longitud = longitud del primero
+ longitud del segundo + 1.
2. Mediante dos bucles anidados,
calculamos el producto de
cada cifra, al cual le
sumaremos el acarreo actual.
La posicin correspondiente al
array resultado, coindice con la
suma de los ndices de ambos
arrays.
3. Asignar a la posicin actual del
array resultado, el resto de
dividir la multiplicacin entre
10.
4. Acumular en la posicin
siguiente el acarreo actual, es
decir, el cociente de dividir la
multiplicacin entre 10.
5. Si hemos alcanzado el nal del
array resultado, FIN. Si no,
pasar a la siguiente cifra.
Funcin:
1
2
3
4
5
6
7

publicstaticint[]multiplicar
int[]r=newint[a

for(inti=0;i<r

for(inti=0;i<
for(intj=0;j

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

4/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

8
9
10
11
12
13
14
15

intmul=r[i
r[i+j]=mul
r[i+j+1]
}
}

returnr;
}

Finalmente, necesitaremos una


funcin que muestre el resultado.
Juntando todo el cdigo, resultara
la clase:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

publicclassOperacionesArrays

publicstaticvoidmain(

int[]a=newint[]
int[]b=newint[]

int[]rSuma=sumar(
int[]rMultiplicacion

mostrar(rSuma);
mostrar(rMultiplicacion
}

publicstaticint[]sumar

if(b.length>a.length
elselongitud=a.length

int[]r=newint[longitud
for(inti=0;i<r

for(inti=0;i<r
intsuma=r[i];

if(i<a.length)
if(i<b.length)

r[i]=(suma%10
r[i+1]+=suma
}

returnr;
}

publicstaticint[]multiplicar
int[]r=newint[a

for(inti=0;i<r

for(inti=0;i<
for(intj=0;j
intmul=r[i
r[i+j]=mul
r[i+j+1]
}
}

returnr;
}

publicstaticvoidmostrar

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

5/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

53
54
55
56
57
58
59
60

for(inti=a.length
System.out.print(
}
System.out.println();
}

Lo que hemos visto en este


tutorial
1. Declaracin de arrays en la
forma inline.int[]a=new
int[]{1,2,3}
2. Manejo nivel intermedio de los
ndices de los arrays.
3. Declarar un array con longitud
variable.
4. Atomizar funcionalidades con
el uso de funciones.
5. Sentencias condicionales.
ifelse
6. Sentencias iterativas. for

Mejoras que se pueden


implementar
Se proponen como ejercicio, 2
funciones alternativas. Una funcin
que reste 2 arrays, y otra que
calcule su cociente. Porque qu
sucedera en caso de que algn
nmero fuera negativo? Ni la
funcin sumar(), ni la funcin

multiplicar() contemplan ese caso.


Por otro lado, slo estaramos
trabajando con nmeros enteros.
Aplicar mejoras para operar con
decimales o nmeros de precisin
arbitraria, tambin sera
interesante.
Otra mejora que cabra destacar,
sera la recepcin de los nmeros a
operar mediante algn recurso
ms genrico, en vez de estar
hardcodeado denido en cdigo
fuente. Por ejemplo, un archivo que
http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

6/7

24/11/2016

CmosumarymultiplicararraysenJava|katodia

en cada lnea tuviera un nmero de


longitud variable. El programa los
parseara, y lo introducira en un
array para su posterior
procesamiento.

11 AGOSTO, 2015

0 COMENTARIOS

POR MARCOS SNCHEZ

ETIQUETAS: ARRAYS, JAVA,


MULTPLICACION, SUMA, VECTORES

Compartir esta entrada

Quizs te interese

Curso Suma Cmo Warismox


de
saber - La
programacin
fusin- si un importancia
en
de ao es del
Java arrays bisiestodiseo
en la
para
en
en
novatos Java

Java programacin

0
COMENTARIOS

http://katodia.com/2015/08/sumaymultiplicaciondearraysenjava/

7/7

Das könnte Ihnen auch gefallen