Dificuldade em conversão double e int

2 respostas
java
V

Escreva um programa em Java que leia um valor inteiro N.

Caso o valor de N seja positivo ou igual a zero, calcule e apresente a soma S definida pela sequência:

S=0/1+1/2+2/3+3/4+⋯+N /(N +1) .

Caso o valor de N seja negativo, transforme o valor de N para positivo, calcule apresente o produto P definido pela sequência:

P = 3/1 * 4/2 * 5/3 * ⋯ * (N+2)/N

Obs: Se você estiver fazendo uma divisão de dois inteiros, por exemplo N/(N+1), o resultado será um valor inteiro e as casas decimais serão truncadas. Por exemplo, 1/2 será igual a zero e não 0.5, como esperado. Você precisa usar cast para forçar que o resultado seja convertido para um número real (double).

Exemplos:
Formato de entrada

4

Formato de saída

2.716666666666667

Entrada

11

Saída

8.896789321789322

Entrada

-13

Saída

104.99999999999999

Com o código abaixo tá funcionando para N positivo, só que quando é negativo tem alguns erros, tipo quando coloco -13 ele retornar 105.0 e no exemplo tem que dá 104.99999999999999
Acho que tô errando na hora de fazer o cast, só que já mudei e nada. Alguma ajuda?

int N = in.nextInt();
	int f=1;
	double S=0;
	//Para N posiivo
	if(N>=0){
		for(int i=0; i<=N; i++){
			S+=(double)i/(double)f;
			f++;
		}System.out.println(S);
	//Para N negativo
	}else if(N<0){
		N=N*(-1);
		int g=2;
		double P=3;
		double R = 0;
		for(int i=4; i<=(N+2); i++){
			P=(double)(P*i)/(double)g;
			g++;
			
		}System.out.println(P);
	}

2 Respostas

FilipeMapelli

Boa tarde,
o erro é no seu cast e fórmula matemática. Repare que dentro do parênteses (Pi) mesmo fazendo o cast sempre vai retornar inteiro, pois o N em questão é 13 e o i é inteiro tbm. Então Pi mesmo com cast vai ser numero inteiro. Ai consequentemente vc vai dividir int por int, já que o cast de g tbm terá número inteiro. Para solucionar isto isole P ai multiplique pela divisão (i / g) com um cast para esta divisão.

for(int i=4; i<=(N+2); i++){
            P = P * ((double)i/g);
            g++;
        }
V

Muito obrigado! Funcionou.

Criado 3 de maio de 2016
Ultima resposta 3 de mai. de 2016
Respostas 2
Participantes 2