【问题标题】:Calculating nth root of a positive integer in Java在Java中计算正整数的第n个根
【发布时间】:2014-11-10 08:50:58
【问题描述】:

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

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?

【问题讨论】:

  • 我没有看到 root 在此表达式中使用的任何地方定义:Math.pow(a,(1/root))。这是什么?
  • @icza 这是一个错字。 root 应该是 nn 应该是 root
  • 使用double 永远不会得到 100 位小数。我可以给你BigDecimal 感兴趣吗?
  • pow 顺便说一下这个函数的名字很糟糕。
  • 如何合并 BigDecimal?

标签: java recursion square-root


【解决方案1】:

1/n 替换为1.0/n

你得到的是整数除法,所以不管n 是什么,如果它是 2 或更高,那么1/n 就是零。然后你将你的数字提高到零次方,得到1

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

【讨论】:

  • 前提是root也是一个整数,否则不管字面量是什么类型都是浮点运算。
  • 对。在我看来,OP 的意图是 rootn 相同,只是其中一个打错了。
  • 根应该是 n,而不是根。但不管怎样,这行得通!
  • 好的,既然你刚刚编辑了你的问题,我编辑了我的答案以匹配它。
  • 是的,我做到了!感谢您的帮助,真是个愚蠢的错误!
【解决方案2】:

首先,我假设

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

应该是

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

因为您的代码中没有 root 变量。

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

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

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

为了得到双变量的除法。

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多