在Java中计算正整数的第n个根

时间:2014-11-10 08:50:59

标签: java recursion square-root

我的任务是编写一个程序,提示用户输入正双a和整数 n大于2,并将正整数a的第n个根的值打印到屏幕上,精确到100个位置。我已经使用Math.pow来获得根,我觉得我已经做好了一切。唯一的问题是,每次运行程序时,输出都是1.0,无论我为an输入的数字是多少。我的代码有什么问题?

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 个答案:

答案 0 :(得分:8)

1/n替换为1.0/n

您正在获得整数除法,因此无论n是什么,如果它是2或更高,那么1/n将会出现零。然后你将你的数字提高到零功率,得到1

1替换1.0使得除法成为浮点除法 - 也就是说,结果不会被截断为整数。这就是你想要的。

答案 1 :(得分:5)

首先,我假设

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

应该是

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

因为代码中没有root变量。

其次,对于每个整数n,1 / n会给出0>因此总和为1.0。 您应该将其替换为:

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

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

为了得到双变量的除法。