Ir ao conteúdo
  • Cadastre-se
Marco Tulio Oliveira Abreu

Iniciante java - variável

Recommended Posts

Olá, estou a fazer um exercício de c++ em java e ele precisa de numeros bem grandes ( imprimir a 199º linha do triangulo de pascal) ( no c++ estava declarando a variável como long long ).

No java o long não conseguiu suprir isso, alguém sabe um jeito de contornar isso?

Editado por Marco Tulio Oliveira Abreu
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode dar um help? Eu andei olhando na net e falam que é imutável, mas no meu código tenho q associar um vetor big integer o tempo todo com valores como 1, 199...

 

[Edit]

Consegui fazer as contas com ele mas o java aponta este erro:

Exception in thread "main" java.lang.NullPointerException
        at Triangulo_Pascal.gerar(Triangulo_Pascal.java:20)
        at Triangulo_Pascal.main(Triangulo_Pascal.java:38)

Linha 38:                 gerar(n_linhas, vetor);

Linha 20:             vector[j] = vector[j-1].add(vector[j]);

Editado por Marco Tulio Oliveira Abreu

Compartilhar este post


Link para o post
Compartilhar em outros sites

O BingInteger é imutável sim. Você sempre precisa coletar outra referencia após realizar operações, por exemplo:

 

BigInteger i = new BigInteger("1"); // Inciando com 1
i = i.add(new BigInteger("10"));

Seu nullpointer não tem relação com o fato dele ser imutável. Cole a linha 20 do seu source. Vamos analisar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linha 20 é vector[j] = vector[j-1].add(vector[j]);

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, Eduardo Frazão disse:

voce pode colar o source todo?

import java.util.Scanner;
import java.math.BigInteger;
public class Triangulo_Pascal{    
    public static void imprimir(int n_linhas, BigInteger[] vetor){
        System.out.printf("linha %d: ", n_linhas);
        for (int k = 1; k <= n_linhas+1; k++){
            if (k == n_linhas + 1){
                System.out.printf("1 ");
            }
            else{
                System.out.printf("%d ", vetor[k]);
            }
        }
        System.out.printf("\n");
    }
    
    public static void gerar(int n_linhas, BigInteger[] vetor){
        BigInteger[] vector = new BigInteger[n_linhas+1];
        for(int j = 1; j <= n_linhas; j++){
            vector[j] = vector[j-1].add(vector[j]);

        }
        for(int l = 0; l <= n_linhas; l++){
            vetor[l] = vector[l];
        }
    }
    
    public static void main(String[] args){
        Scanner input = new Scanner( System.in );
        int i, n_linhas;
        n_linhas = input.nextInt();
        while(n_linhas >= 0 && n_linhas <= 200){
            BigInteger[] vetor = new BigInteger[n_linhas+2];
            for (int a = 1; a <= n_linhas ; a++)
                BigInteger vetor[a] = new BigInteger("0");
            BigInteger vetor[0] = new BigInteger("1");
            for (int b = 0; b <= n_linhas; b++)
                gerar(n_linhas, vetor);
            imprimir(n_linhas, vetor);
            n_linhas = input.nextInt();
        }
    }
}

Até colocar o BigInteger o programa rodava, aí dps vi que as variáveis estouravam (porque preciso que rode de 0 a 200 (linhas do triangulo de pascal) e usa numeros mt grandes, daí tive que mexer com o big, mas é todo diferente x(

Editado por Marco Tulio Oliveira Abreu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×