Ir ao conteúdo

Multiplicação com mais de 20 digitos em java


anacsl

Posts recomendados

  • Membro VIP
Postado

Pense no algoritmo de multiplicação que você aprendeu na escola:

Você parte da direita para a esquerda e vai multiplicando os números um a um, colocando o resultado abaixo e passando adiante a parte decimal da multiplicação. Por exemplo, veja a operação de multiplicação entre os números 47 e 13:

Etapa 1: Armando a multiplicação
47
[U]13

[/U]
Etapa 2: Multiplica-se 3 por 7, e sobre o 2
2
47
[U]13[/U]
1

Etapa 3: Multiplica-se o 3 pelo 4 e soma-se o resultado com 2
47
[U]13[/U]
141

Etapa 4: Multiplica-se o 1 pelo 7
47
[U]13[/U]
141
7

Etapa 5: Multiplica-se o 1 pelo 4
47
[U]13[/U]
141
47

Etapa 6: Soma-se os valores obtidos nas etapas intermediárias

47
[U]13[/U]
141
[U]47
[/U] 611

Com isso nós podemos notar que a multiplicação como um todo na verdade é constituída de pequenas operações simples, ou seja, se você armazenar cada número de 20 dígitos em arrays separados e for fazendo a operação dígito a dígito será possível realizar esta operação.

Acredito que o X da questão nesse problema seja onde colocar o resultado, e a minha recomendação é utilizar uma String(ou um objeto da classe StringBuffer, que é mais rápido). Dessa forma você não terá qualquer forma de limitação prática.

Há alguns outros detalhes que eu ainda não falei, mas peço que você pense no que eu disse e tente elaborar uma solução, então quando as dúvidas surgirem(se surgirem) é só dar uma passada aqui ei vou te ajudando a chegar numa solução gradualmente.

Abraços.

  • Membro VIP
Postado

Não existe exatamente uma função que faça isso que você quer, mas é possível obter este resultado utilizando um loop que vá percorrendo os arrays.

Postado

eu consigo entender

porém nao consigo passar para o java a parte do calculo...

sou iniciante, so faz dois meses que comecei mexer.

sera que podia dar um ajuda nessa parte.

creio que é a duvida de muita gente

obrigado

Postado

é pelo jeito é minha duvida e de mais 54 pessoas...

agradeço por estar me ajudando.

porém tenho que entragar o trabalho amanha a noite...

vou continuar amanha cedo..

post que eu vejo depois

thanks:D

  • Membro VIP
Postado

Bem, vamos dividir o problema em partes menores. Primeiro é necessário criar um trecho de código que percorra um array, para isso podemos utilizar um laço for:


int array1[] = new int[20];
for(int i = 0; i < array.length; i++)
array[i];

Bem, com isso conseguimos acessar cada posição do array. Depois disso é preciso fazer com que cada posição do array realize a operação de multiplicação em outras posições do array:


int array1[] = new int[20];
int array2[] = new int[20];
for(int i = 0; i < array.length; i++)
for(int j = 0; j < array.length; j++)
array1[i] * array2[j];

(note que eu não armazenei o resultado em lugar nenhum, apenas estou passeando pelos arrays e fazendo multiplicações "inúteis")

Esse é o esqueleto do método para calcular a multiplicação, você consegue entendê-lo? De certa forma consegue visualizar a utilidade disso para o problema como um todo?

Tente fazer o seguinte: mesmo que não saiba como implementar, levante idéias de como fazer o que deseja, sem pensar em como botar isso em Java(faça no papel mesmo). Crie um algoritmo que efetue a operação que você deseja e tente descrever o seu funcionamento, ainda não se preocupe em implementar. Se preocupe primeiro com o algoritmo, depois com a implementação.

Aguardo suas idéias.;)

Abraços.

Postado

deu certo a minha conta...

porém nao consigo colocar digito por digito dentro do vetor...

utilizando o vetor de byte nao da o valor desejada.

icoloca-se um numero grande

mas nao retorna esse mesmo numero que vai ser inserido no vetor.

como faço para inserir esse numero no vetor?

  • Membro VIP
Postado

Você terá que percorrer o número caracter a caracter e inserir cada um no vetor, lembrando de fazer a devida conversão de char para byte.

Postado

nao sei fazer essa conversao e nao achei nada...

eu estava tentando:

o usuario colocava um numero(string)

apos isso tava tentando converter em um vetor de Byte

mas dava valores diferentes

(_((_((_(

  • Membro VIP
Postado

Você precisará colocar cada número em uma posição individual do vetor. Dessa forma, será necessário percorrer a String utilizando o método charAt(), o qual retorna o caracter numa dada posição da string, e realizar a conversão do caracter para o tipo numérico utilizando o método parseByte da classe estática Byte (Byte.parseByte()), depois basta inserir o resultado da conversão na devida posição do vetor.

Postado

problema rsolvido...

mandei o que consegui fazer para o professor.

mas se fazer um dia um programa desse me passa please...

obrigado pela paciencia que teve de me explicar.

thanks

  • Membro VIP
Postado

Pena que não deu tempo de terminar.:(

Esse não é um programa muito complicado, a sua dificuldade é normal pois você está começando, mas daqui a algum tempo você vai olhar pra trás e ver que não era tão difícil.:)

Se você ainda tiver interesse em terminar o programa eu posso ir te ajudando a fazer.

Abraços.

Postado

boa noite... eu tmbm fiquei sem entregar este trabalho achoq perdi a nota pois tive dificuldade em terminalo.. mas tenho interesse em terminalo mesmo depois da data de entrega se puder me ajudar fiko grato

eu estava pensando em fazer 3 vetores um q recebera o multiplicador outro recebera o multiplicando e outro recebera o resultado mas não sei bem como fazer x(

  • Membro VIP
Postado
boa noite... eu tmbm fiquei sem entregar este trabalho achoq perdi a nota pois tive dificuldade em terminalo.. mas tenho interesse em terminalo mesmo depois da data de entrega se puder me ajudar fiko grato

eu estava pensando em fazer 3 vetores um q recebera o multiplicador outro recebera o multiplicando e outro recebera o resultado mas não sei bem como fazer x(

Olá eltatomio, desculpe pela demora para responder, é que essa semana foi um bocado puxada. Mas vamos ao que interessa...^_^

Você pode até utilizar 3 vetores, mas lembre-se que o terceiro vetor deve ter tamanho 40, pois ao multiplicar os dois maiores números de 20 dígitos é necessário 40 casas para o resultado.

Vamos primeiro pensar que um número tem 20 casas e o outro tem apenas 1. Nesse caso você vai multiplicar o único dígito do segundo número por cada dígito do número de 20 casas e botar o resultado na posição do array, mas lembre-se de que uma posição só vai de 0 a 9, então se o resultado da multiplicação ultrapassar o número 10, será necessário pegar apenas a sua parte unitária(subtraindo 10) e somar 1 na posição à esquerda.

Para um número de 2 dígitos o processo ocorre da mesma forma com o primeiro dígito, mas com o segundo dígito lembre-se de que é necessário somar o resultado obtido com o já existente no array a partir da segunda posição, basta se recordar do algoritmo de multiplicação.

Se você fizer uma multiplicação entre dois números de 20 dígitos no papel vai reparar que se formará uma espécie de "escada" com os números, e que sempre que você avança uma casa no multiplicador, o número inserido abaixo da barra também avança uma casa para a soma final, então se você conseguir fazer o algoritmo para apenas um número, será necessário realizar apenas ualgmas pequenas alterações para que o resultado da multiplicação pelo n-ésimo dígito do multiplicador seja somado com o que há na n-ésima posição do resultado.(isso pode ser feito utilizando um contador)

Pense um pouco e veja se entendeu, qualquer coisa eu elaboro melhor a explicação.

Abraços.

Postado

Goliathvv, preciso fazer um analisador morfologico em pascal

pode me ajudar ?

Vou abrir um topico ,em pascal por favor se puder me ajudar

esse trabalho É mais difícil que o outro

ah e consegui fazer a multiplicaÇÃo com mais de 20 digitos

obrigado

  • Membro VIP
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!