Metodo Add

5 respostas
A

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

public class Teste01 {
	public static void main(String[] d){
		BigInt bg;
		int valor = 1567;

		bg = new BigInt(999L);
		System.out.println("BigInt Add(int valor) ="+ bg.Add(valor));
			
	}
}

Class BIGINT

public BigInt Add(int valor){
		String valor1 =  String.valueOf(valor);
		BigInt novovetor = new BigInt(number.length+1);
		int[] vetor = new int [valor];
		int vaium = 0;
		for(int i = valor1.length()-1 ; i>= 0; i--){
			vetor[i] = valor1.charAt(i) - 48;
		}
		for(int i=0 ; i< novovetor.number.length; i++){
			int soma = 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;
			}
		}
		
		
		
		return novovetor;
	}

se alguem tiver paciência agradeço.

5 Respostas

A

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

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

não ele não da erro
ele retorna sempre o resultado 0

segue o programa completo

public class BigInt {
	protected int number[];
	protected boolean positive;
	
	public BigInt(long value){
		positive = value >= 0;
		long n = (long)Math.abs(value); //SE O Nº FOR NEGATIVO ELE VIRA POSITIVO, SE POSITIVO
										// ELE CONTINUA POSITIVO
		int digits = (int)(Math.log10(value))+1; //PEGA O TAMANHO DE VALUE, QUE É TO TAMNHO DOS NUMEROS DIGITADOS
		number = new int[digits];
		
		for(int i = 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 10
			n = n/10; // RETIRA O ULTIMO NUMERO DE n JÁ QUE ELE ESTÁ SENDO DIVIDIDO POR 10
		}
	}
	
	public BigInt(){
		this(0);
	}
	
	public BigInt(String value){
		String n;
		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;
		}
		int digits = n.length();
		number = new int[digits];
		
		for(int i=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
			 */
		}
	}
		
	
	public String toString(){
		StringBuffer sb = new StringBuffer();
		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(int i=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
			 */
		}
		return sb.toString();
	}
	
	public BigInt(BigInt value){
		positive = value.positive; //RECEBE O VALOR DA VARIAVEL POSITIVE DO OUTRO CONSTRUTOR
		number = new int [value.number.length]; // NUMBER RECEBE O TAMNHO DE VALUE DO OUTRO CONSTRUTOR
		
		for(int i =0; i<number.length; i++){
			number[i] = value.number[i]; // number RECEBE O VALOR DA POSIÇÃO 'i' DE number DO OUTRO CONSTRUTOR
		}
	}
	
	public BigInt Add(int valor){
		String valor1 =  String.valueOf(valor);
		BigInt novovetor = new BigInt(number.length+1);
		int[] vetor = new int [valor];
		int vaium = 0;
		for(int i = valor1.length()-1 ; i>= 0; i--){
			vetor[i] = valor1.charAt(i) - 48;
		}
		for(int i=0 ; i< novovetor.number.length; i++){
			int soma = 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;
			}
		}
		
		
		
		return novovetor;
	}
		
		
		
	
	

}
Criado 6 de junho de 2009
Ultima resposta 7 de jun. de 2009
Respostas 5
Participantes 2