【问题标题】:Does Java have an exponential operator?Java有指数运算符吗?
【发布时间】:2014-03-31 19:38:30
【问题描述】:

Java 中有指数运算符吗?

例如,如果提示用户输入两个数字并输入32,则正确答案为9

import java.util.Scanner;
public class Exponentiation {

    public static double powerOf (double p) {
        double pCubed;

        pCubed = p*p;
        return (pCubed);
    }

    public static void main (String [] args) {
        Scanner in = new Scanner (System.in);

        double num = 2.0;
        double cube;    

        System.out.print ("Please put two numbers: ");
        num = in.nextInt();

        cube = powerOf(num);

        System.out.println (cube);
    }
}

【问题讨论】:

  • p*ppSquared,而不是 pCubed

标签: java pow exponent


【解决方案1】:

没有运算符,但有方法。

Math.pow(2, 3) // 8.0

Math.pow(3, 2) // 9.0

仅供参考,一个常见的错误是假设 2 ^ 3 是 2 的 3 次方。它不是。插入符号是 Java(和类似语言)中的有效运算符,但它是二进制异或。

【讨论】:

  • 我想知道为什么^ 是按位 XOR 运算符(例如 Java 和 Python)的要素标准 - 一定让许多初学者或 MATLAB 用户感到困惑......
  • 为什么要单独列出 java 和 python? ^ 作为通用过程编程语言中的按位异或是由 C 引入的,几乎任何基于 C 的语言(或从 C 或 C++ 获得灵感的语言)都遵循该约定。它在特殊用途的数学编程语言中意味着其他东西的事实不应该真的让任何人感到困惑吗?
【解决方案2】:

使用用户输入执行此操作:

public static void getPow(){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter first integer: ");    // 3
    int first = sc.nextInt();
    System.out.println("Enter second integer: ");    // 2
    int second = sc.nextInt();
    System.out.println(first + " to the power of " + second + " is " + 
        (int) Math.pow(first, second));    // outputs 9

【讨论】:

    【解决方案3】:

    Math.pow(double a, double b) 方法。请注意,它返回一个双精度值,您必须将其转换为像 (int)Math.pow(double a, double b) 这样的 int。

    【讨论】:

      【解决方案4】:

      最简单的方法是使用数学库。

      使用Math.pow(a, b),结果将是a^b

      如果你想自己做,你必须使用for-loop

      // Works only for b >= 1
      public static double myPow(double a, int b){
          double res =1;
          for (int i = 0; i < b; i++) {
              res *= a;
          }
          return res;
      }
      

      使用:

      double base = 2;
      int exp = 3;
      double whatIWantToKnow = myPow(2, 3);
      

      【讨论】:

      • 如何提示用户输入两个数字?即 2 3 = 8
      • 在您的示例中,基数将为 3 和指数 2。我想您应该乘以内部循环并迭代 b 次。
      • @libik 如果 b 为负数怎么办?
      • myPow(double, double) 方法签名暗示它使用浮点幂进行计算,而实际上它没有。方法签名应为 myPow(double, int)。 Math.pow(double, double) 确实考虑了浮点幂,例如,Math.pow(4, 0.5) 返回 4 的平方,所以 2,而 myPow(4, 0.5) 将返回 4。
      • @HummelingEngineeringBV - 好的,让我们在 4 年多后修复它 :)
      【解决方案5】:

      您可以使用 Math 类中的 pow 方法。以下代码将输出 2 提升为 3 (8)

      System.out.println(Math.pow(2, 3));
      

      【讨论】:

        【解决方案6】:

        如果有人想使用递归创建自己的指数函数,以下供您参考。

        public static double power(double value, double p) {
                if (p <= 0)
                    return 1;
        
                return value * power(value, p - 1);
            }
        

        【讨论】:

        • 请不要推荐这样的算法,它只适用于 p 域的可忽略的子集
        猜你喜欢
        • 2011-03-03
        • 2020-11-16
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        • 2015-09-26
        • 1970-01-01
        相关资源
        最近更新 更多