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

Ibr*_*ter 4 java recursion square-root

我的任务是编写一个程序,提示用户输入一个正a整数和一个n大于2 的整数 ,并将正整数的第n个根的值打印a到屏幕上,精确到100个位置.我曾经Math.pow能够获得根,我觉得我已经做好了一切.唯一的问题是,每次我运行我的程序时,输出的是1.0,无论什么数字I输入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;
}
Run Code Online (Sandbox Code Playgroud)

为什么答案总是1.0?

Daw*_*ica 8

替换1/n1.0/n.

你得到整数除法,所以无论是什么n,如果它是2或更高,那么1/n就是零.然后你将你的数字提高到零功率,这给了1.

更换11.0使分割成浮点除法-也就是说,结果不会被截断成整数.这就是你想要的.


Era*_*ran 5

首先,我假设那样

double sum = Math.pow(a,(1/root));
Run Code Online (Sandbox Code Playgroud)

应该

double sum = Math.pow(a,(1/n));
Run Code Online (Sandbox Code Playgroud)

因为root代码中没有变量.

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

double sum = Math.pow(a,(1.0/n));
Run Code Online (Sandbox Code Playgroud)

要么

double sum = Math.pow(a,(1/(double)n));
Run Code Online (Sandbox Code Playgroud)

为了得到双变量的除法.