Somar números gigantes..  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

sergiotaborda wrote:
Felagund wrote:vc pode armazenar em um long, pois ele guarda diversos números, vc pode ver o padrão Money Implementado em java, pode te ajudar

http://www.javabuilding.com/academy/patterns/money.html

esse post do Sergio Taborda é muito interessante.



O truque do long só se aplica ao padrão Money e não à soma de numero arbitráriamente grandes. É que o máximo valor de um long em dinheiro,em qualquer moeda, é grande o suficiente.

Para aritmética de inteiros enormes, BigInteger é o cara. A mecanismo do BigInteger é separar os algarismos numa array de int em que cada elemento vai de 0 a 9 e somar como fazemos à mão. mas o biginteger também é limitado ao numero de elementos num array que é a quantidade de inteiros positivos.


Sim normalmente uso o BigInteger, porém ela citou que não podia usar a API padrão na questão. por isso citei o money mas como referencia do que como solução.

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online

Eu lembro de ter implementado isso em uma calculadora programável (TI-59) há várias décadas atrás.

Eu tinha implementado a adição, subtração, multiplicação e divisão.
Andre Brito
JWizard

Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline

Não sei se já falaram, mas você pode implementar o ALGORITMO BigNum.
Soma e subtração são bem fáceis de fazer... É na multiplicação e divisão que o bicho pega.

Editado: ali eles usam o BigInteger do Java pra mostrar como é feito na linguagem... Mas o princípio teórico acho que pode ser o mesmo. Veja este site, do Vinícius Fortuna (um dos top em algoritmos, na minha opinião), que tem os notebooks. O da PUC tem o algoritmo implementado em C.

Aliás, acho que +- (ou exatamente) o que o entanglement explicou.

This message was edited 2 times. Last update was at 12/03/2010 23:28:06


Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change.
[WWW]
Dryca
What is classpath?
[Avatar]

Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline

oi galera
comecei a fazer o codigo de acordo com as instruçoes do entanglement:
dai tahficando assim

public class NumerosGigantes {
String pri = "311415926535897932384626433832795";
String seg = " 58598744820488384738229308546322";

private void Somar(){
int i = Integer.parseInt(pri);
int j = Integer.parseInt(seg);
int[] a = new int[4];
a[0]= 433832795;
a[1]= 932384626;
a[2]= 926535897;
a[3]= 31415;

int[] b = new int[4];
b[0]= 874713527;
b[1]= 452353602;
b[2]= 818284590;
b[3]= 27182;

int[] c = new int[5];
c[0] = a[0] + b[0];
if (c[0]>= 1000000000){
c[0]= c[0]% 1000000000;
c[1]= c[0];
}
c[1]= a[1]+b[1];
if (c[1]>= 1000000000){
c[1]= c[1]% 1000000000;
c[2]= c[1];
}
c[2]= a[2]+b[2];

if (c[2]>= 1000000000){
c[2]= c[2]% 1000000000;
c[3]= c[2];
}
c[3]= a[3]+b[3];

c[4]=0;
}
}


qunado chega nessa parte:
Para converter o número de novo para uma string, devemos então pegar
cada int no array c, e imprimi-lo com 9 algarismos, completando com
zeros à esquerda se for o caso. Não se esquecer que é para pegar cada
número de trás para frente. Pus alguns espaços para você entender
melhor.
eu nao tenho ideia de como fazer....
uma ajuda?

This message was edited 2 times. Last update was at 14/03/2010 16:51:41

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17539
Offline

Só vou indicar que, para imprimir um número com zeros à esquerda e com 9 casas, você pode usar String.format:


[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team