2014-11-10 5 views
3

Моя задача состоит в том, чтобы написать программу, которая предлагает пользователь ввести положительный двойной a и целое n больше 2, и напечатать значение корня степени п из положительного числа a на экран с точностью до 100 мест. Я использовал Math.pow, чтобы иметь возможность получить корень, и мне кажется, что я все сделал правильно. Единственная проблема заключается в том, что каждый раз, когда я запускаю свою программу, вывод 1.0, независимо от того, какие числа я вводил для a и n. В чем проблема с моим кодом?Расчет п-й корень из положительного числа в Java

import java.util.Scanner; 
import java.lang.Math; 

public class Q8 { 

    public static void main(String[] args) { 

    System.out.println("Enter a positive number: "); 
    Scanner in = new Scanner(System.in); 
    double a = in.nextDouble(); 

    System.out.println("Enter an integer greater than 2: "); 
    Scanner in2 = new Scanner(System.in); 
    int n = in.nextInt(); 

    System.out.println(pow (a,n)); 
    } 

private static double pow(double a, int n) { 
     if (n == 0){ 
      return 1; 
     } 

     else{ 
     double sum = Math.pow(a,(1/n)); 
     return sum; 
} 

Почему всегда ответ 1.0?

+2

Я не вижу 'root', определяемого где угодно, используемого в этом выражении:' Math.pow (a, (1/root)) '. Что это? – icza

+0

@icza Это опечатка. Либо 'root' должен быть' n', либо 'n' должен быть' root'. –

+2

Вы никогда не получите 100 десятичных знаков, используя 'double'. Могу ли я вас заинтересовать в «BigDecimal»? –

ответ

8

Заменить 1/n на 1.0/n.

Вы получаете целочисленное деление, поэтому независимо от того, что такое n, если оно равно 2 или выше, то 1/n выходит на ноль. Затем вы поднимаете свой номер до нулевой силы, что дает 1.

Замена 1 на 1.0 делает деление на деление с плавающей запятой - то есть результат не будет усечен до целого. Это то, что вы хотите.

+1

При условии, что 'root' также является целым числом, в противном случае это операция с плавающей запятой, независимо от типа литерала. – Thomas

+0

Справа.Мне кажется, что OP означает, что «root» и «n» должны быть одинаковыми, и просто набрал один из них неправильно. –

+0

корень должен быть n, а не root. но, тем не менее, это сработало! – Ibrewster

4

Прежде всего, я предполагаю, что

double sum = Math.pow(a,(1/root)); 

должен быть

double sum = Math.pow(a,(1/n)); 

поскольку нет root переменной в коде.

Прежде всего, 1/n даст вам 0 для каждого целого n> 1. Поэтому сумма будет равна 1,0. Вы должны заменить его:

double sum = Math.pow(a,(1.0/n)); 

или

double sum = Math.pow(a,(1/(double)n)); 

Для того, чтобы получить разделение двойных переменных.

 Смежные вопросы

  • Нет связанных вопросов^_^