| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 09:06:12
|
Dryca
What is classpath?
![[Avatar]](/images/avatar/d56b7e3ab2e7e5e779c5127f56de5c00.jpg)
Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline
|
Galera...
Alguem sabe como faço para somar numeros inteiros gigantes?
Acho que preciso implementar uma classe atraves de arrays pq quero somar qualquer tamanho de numeros bem maior que 32 bits...
me parece que tem uma classe feita em uma biblioteca que já faz isso...
alguém sabe qual é?
tem alguma implementada que me sirva de exemplo?
valew
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 09:10:43
|
neeryck
Java Ninja
![[Avatar]](/images/avatar/84c5ce2b2981e8392cc9e5d300c23303.jpg)
Membro desde: 10/07/2009 11:34:12
Mensagens: 274
Offline
|
http://java.sun.com/javase/6/docs/api/java/math/BigInteger.html
|
"É impossível para um homem aprender aquilo que ele acha que já sabe"(Epítero). |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 09:56:42
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 3927
Localização: Vargem Grande do Sul - SP
Offline
|
Oi Dryca,
Para trabalhar com números de precisão arbitrária, tanto inteiros como em ponto flutuante, você pode usar respectivamente as classes java.math.BigInteger e java.math.BigDecimal.
[]´s
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:32:33
|
Dryca
What is classpath?
![[Avatar]](/images/avatar/d56b7e3ab2e7e5e779c5127f56de5c00.jpg)
Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline
|
galera valew por lembrar dessa classe..
eu sei que seria muto mais facil usar essa classe
mas preciso de implementar essa classe..
nao posso usar o pacote, preciso faze-la
estava pensando em transformar o numero em String e depois pegar caracter por caracter colocar em doias arrays e somar...
mas queria um exemplo de codigo que fizesse isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:33:38
|
pvrsouza
Virtual Machine Man
![[Avatar]](/images/avatar/dc58460601ab2b4e101cff43f30564f3.jpg)
Membro desde: 04/08/2009 09:50:14
Mensagens: 500
Localização: Salvador-BA
Offline
|
Exemplo:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:36:50
|
mario.fts
GUJ Ranger
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline
|
Pq vc não poderia utilizar? Elas não são pacotes de terceiros, fazem parte da API padrão do java.
This message was edited 1 time. Last update was at 12/03/2010 10:37:19
|
Mário Amaral Gonçalves
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:39:33
|
Dryca
What is classpath?
![[Avatar]](/images/avatar/d56b7e3ab2e7e5e779c5127f56de5c00.jpg)
Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline
|
nao posso usar pq é um trabalho que estou fazendo e é necessário que eu faça uma classe que faça exatamente a soma que a java.math.BigInteger faz.
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:41:06
|
mark_domi
JavaGuru
Membro desde: 30/01/2004 16:35:03
Mensagens: 243
Offline
|
mario.fts wrote:Pq vc não poderia utilizar? Elas não são pacotes de terceiros, fazem parte da API padrão do java.
Trabalho da faculdade, aposto.
|
http://www.sentirepensar.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:42:19
|
mario.fts
GUJ Ranger
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline
|
aaaaaaa taaaaaaa. não tinha percebido q era um trabalho.
boa sorte.
|
Mário Amaral Gonçalves
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 10:45:33
|
Felagund
GUJ Master
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline
|
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.
|
att
Rafael Felix
Rolling With Code
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:06:30
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
Vou dar um exemplo do que você pode fazer.
Digamos que você tenha os seguintes números:
31415926535897932384626433832795
e
27182818284590452353602874713527
Você sabe que ao somar esses dois números, o resultado deve ser
58598744820488384738229308546322
Vamos ver como se chega a esse resultado.
A primeira coisa é você criar um método que receba uma string, e converta para um array de ints, cada int contendo 9 algarismos.
Você põe os algarismos de trás para frente, de 9 em 9 posições.
Vou mostrar o que eu quero que você faça.
O comprimento da string 31415926535897932384626433832795 é 32. Isso quer dizer que eu tenho de quebrar em (32 + 9 - 1) / 9 = 4 pedaços. Então você cria um array de 4 ints, com o seguinte conteúdo:
a [0] = 433832795
a [1] = 932384626
a [2] = 926535897
a [3] = 31415
Mostro abaixo com os números de 1 a 9, para ficar mais fácil você entender de onde eu peguei os dígitos.
31415 926535897 932384626 433832795
56789 123456789 123456789 123456789
A mesma coisa você faz com 27182818284590452353602874713527, que vai dar:
b [0] = 874713527
b [1] = 452353602
b [2] = 818284590
b [3] = 27182
27182 818284590 452353602 874713527
56789 123456789 123456789 123456789
Agora é que vou realmente fazer a soma. Crie um array de ints cujo tamanho é igual ao maior tamanho entre os arrays a e b, mais um:
- ou seja, crie um array c com 5 posições.
Some as posições correspondentes. Se um dos arrays for mais curto que o outro, considere que o valor é zero.
c[0] = a[0] + b[0] = 1308546322
c[1] = a[1] + b[1] = 1384738228
c[2] = a[2] + b[2] = 1744820487
c[3] = a[3] + b[3] = 58597
c[4] = 0
Você já está começando a entender? Agora vamos fazer uma correção porque, na nossa notação, todos os números não podem ter mais de 9 algarismos. Se o número tiver mais de 9 algarismos, então tire o algarismo que sobrar, e some-o com o número que está na próxima posição do array. Nesse caso:
c[0] = 1308546322, mas é >= 1000000000, então vamos achar o resto da divisão por 1000000000, que vai dar 308546322
Ou seja, c[0] = 308546322. A divisão de 1308546322 por 1000000000 dá 1, que será somada a c[1].
c[1] = 1384738228 + 1 = 1384738229
Achando o resto e fazendo a divisão, vemos que c[1] = 384738229 e devemos somar 1 a c[2].
c[2] = 1744820487 + 1 = 1744820488
Então c[2] = 744820488, devemos somar 1 a c[3]
c[3] = 58597 + 1 = 58598
c[4] = 0
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.
000000000 000058598 744820488 384738229 308546322
Agora, vamos comparar com o resultado esperado:
58598744820488384738229308546322
Viu? Deu igualzinho.
O que mostrei funciona em Java, C, VB, não importa a linguagem.
This message was edited 1 time. Last update was at 12/03/2010 11:07:43
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:07:31
|
Dryca
What is classpath?
![[Avatar]](/images/avatar/d56b7e3ab2e7e5e779c5127f56de5c00.jpg)
Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline
|
oi galera,
nao é trabalho de faculdade nao..
essa faz parte d uma serie de questoes que me foram passadas no meu trabalho.
esta é a unica que estou com duvida de como fazer, e gostaria só de algum exemplo ou ideia.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:11:17
|
Dryca
What is classpath?
![[Avatar]](/images/avatar/d56b7e3ab2e7e5e779c5127f56de5c00.jpg)
Membro desde: 09/03/2010 10:10:00
Mensagens: 7
Offline
|
Obrigado entanglement :
vou tentar fazer o codigo e depois posto aqui.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 11:25:22
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
A multiplicação é um bocadinho mais chata de fazer, e o algoritmo "ingênuo" (que é igual ao que você faria à mão) é um pouco ineficiente. Existem algoritmos mais eficientes para efetuar multiplicações de números grandes.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 16:58:18
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline
|
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.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|