Meu professor passou um projeto no qual nos devevos criar as operações básicas utilizandos numeros enormes mas não poderias utilizar o BigInteger da vida
então eu preciso criar o BigInteger Add mas estou com um problema de logica pois o programa compila Class de Teste
bom como eu tinha colocado o programa todo…é fds e nguem quer passar hras lendo coloquei soh o q era necessário…
Thiago_Luis
Fala amparense, blza?
Bom, estou em casa tbm XD nesse fds, vamos lá.
De onde vem essa variável number??
Qual que é o objetivo do código? Pois não entendi muito bem :?
Poste awe.
Abraço
A
amparense
bom este BigInt Add está dentro da class BigInt
o number tbm pertence a ela
o int pertence a variavel passada qdo o metodo add é chamado na main
o objetivo é somar o number + o int e retornar um novo BigInt por isso o vetor é um BigInt
Thiago_Luis
Posta a classe BigInt completa.
Vc disse que o programa compila né, mas o que acontece, mostra erro depois??
A
amparense
não ele não da erro
ele retorna sempre o resultado 0
segue o programa completo
publicclassBigInt{protectedintnumber[];protectedbooleanpositive;publicBigInt(longvalue){positive=value>=0;longn=(long)Math.abs(value);//SE O Nº FOR NEGATIVO ELE VIRA POSITIVO, SE POSITIVO// ELE CONTINUA POSITIVOintdigits=(int)(Math.log10(value))+1;//PEGA O TAMANHO DE VALUE, QUE É TO TAMNHO DOS NUMEROS DIGITADOSnumber=newint[digits];for(inti=0;i<digits;i++){number[i]=(int)(n%10);// RECEBE O RESTO DA DIVISÃO OU SEJA NO CASO O ULTIMO NUMERO JÁ// QUE ELE ESTÁ SENDO DIVIDIDO POR 10n=n/10;// RETIRA O ULTIMO NUMERO DE n JÁ QUE ELE ESTÁ SENDO DIVIDIDO POR 10}}publicBigInt(){this(0);}publicBigInt(Stringvalue){Stringn;positive=value.charAt(0)!='-';if(value.charAt(0)=='+'||value.charAt(0)=='-'){n=value.substring(1);// SE NA 1ª POSIÇÃO DA STRING ESTIVER O SINAL '+' OU '-'// ELE RETIRA E COPIA O RESTO, POR ISSO SUBSTRING(1);, COPIA APARTIR DA POS. 1}else{n=value;}intdigits=n.length();number=newint[digits];for(inti=0;i<digits;i++){number[digits-1-i]=n.charAt(i)-48;/* NA TABELA ASCII O NUMERO 0(ZERO) É O 48, COMO ESTAMOS PEGANDO UM CHAR ELE BUSCARÁ NA TABELA ASCII O Nº CORRESPONDENTE SE * FIZERMOS -48, SE FOR 1 SERIA O Nº 49 NA TABELA SE FIZERMOS -48 ELE VOLTA A VALER 1 NOVAMENTE */}}publicStringtoString(){StringBuffersb=newStringBuffer();sb.append(positive?'+':'-');/*O 'append' SERVE PARA PEGAR QUALQUER VALOR, NÃO IMPORTA E É CHAR, INT, DOUBLE * ELE COLOCA NA VARIAVEL 'sb' * COMO 'positive' É BOOLEAN O TESTE PARA ELE É "? '+' (OU): '-' */for(inti=number.length-1;i>=0;i--){sb.append(number[i]);/* AQUI O append COLOCARA CADA POSIÇÃO DE NUMBER[I] EM sb * EX: * NUMBER = 123456789 * sb VAI SER sb=987654321 * DO MENOS SIGNIFICATIVO PARA O MAIS SIGNIFICATIVO * PQ PARA NUMEROS NOS LEMOS DA DIREITA PARA A ESQUERDA MAS EM FRASES LEMOS DA ESQUERDA PARA A DIREITA */}returnsb.toString();}publicBigInt(BigIntvalue){positive=value.positive;//RECEBE O VALOR DA VARIAVEL POSITIVE DO OUTRO CONSTRUTORnumber=newint[value.number.length];// NUMBER RECEBE O TAMNHO DE VALUE DO OUTRO CONSTRUTORfor(inti=0;i<number.length;i++){number[i]=value.number[i];// number RECEBE O VALOR DA POSIÇÃO 'i' DE number DO OUTRO CONSTRUTOR}}publicBigIntAdd(intvalor){Stringvalor1=String.valueOf(valor);BigIntnovovetor=newBigInt(number.length+1);int[]vetor=newint[valor];intvaium=0;for(inti=valor1.length()-1;i>=0;i--){vetor[i]=valor1.charAt(i)-48;}for(inti=0;i<novovetor.number.length;i++){intsoma=this.number[i]+vetor[i]+vaium;if(soma>=10){soma=soma-10;novovetor.number[i]=soma;vaium=1;}else{novovetor.number[i]=soma;vaium=0;}}returnnovovetor;}}