【问题标题】:Using int, double and long in calculation of powers使用 int、double 和 long 计算幂
【发布时间】:2015-05-01 22:28:17
【问题描述】:

我无法确定何时使用 int、double 和 long。

我正在计算整数的幂并返回结果,只要提供的幂不是负数。

对于作业,我需要使用以下代码开始:

public static long powerN(int number, int power) {

这是我想出的:

public class PowerCalculator
{
/**
 * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
 * 
 * @param number The number to take power.
 * @param power The power factor to be taken to.
 * @return The calculation result after taking power of the integer number.
 */
    public static long powerN(int number, int power) {

       if (power > 0)
       {  
         double result = (Math.pow(number, power));  
         return result; 
       }
       else 
       {
         return 1; 
       }
    }
}

我知道我弄乱了 int、double 或 long 的使用,但我不知道如何解决它。

【问题讨论】:

  • 看看this
  • 我怀疑分配的目的不是使用Math.pow,而是通过乘以正确的次数来计算功率。我认为那是你老师在作业中的意图。如果你确实想使用Math.pow,你应该学习关于铸造的知识。例如,要将 double 转换为 long,您会说 (long) result。但我认为这不是他们想要的。
  • 嗯。你可能是对的。我想我最好澄清一下。

标签: java int double long-integer


【解决方案1】:

等等!如果您自己做,请使用更快的算法,例如 Exponentiation by squaring,如下所示:

long powerN(long number, int power){
    long res = 1;
    long sq = number;
    while(power > 0){
        if(power % 2 == 1){
            res *= sq; 
        }
        sq = sq * sq;
        power /= 2;
    }
    return res;
}

【讨论】:

    【解决方案2】:

    你可以自己做:

    public static long powerN(
       int number, 
       int power
    ) {
       if(power == 0) return 1;
       int result = number;
    
       while(power > 1) {
          result*=number;
          power--;
       }
    
       return (long)result;
    }
    

    PS:这里不处理负能量。

    【讨论】:

    • 如果result == 0result * number 是什么?您的方法将始终返回 0。
    • 我刚刚编辑了我的答案,我错过了用数字初始化结果。结果*=数字与结果=结果*数字相同。 @martin-m-j
    • 谢谢。作业说我们可以提出自己的实现,所以我坚持使用 math.pow 并进行了编辑:(长)结果。我刚刚提交了代码。你们非常有帮助。
    • 此代码无法正常工作。 1) x pow n 将返回 x pow n+1 2) x pow 0 应该返回 1,但将返回 x*x
    • 应该是while条件不同吧? while(power > 1) 而不是?
    【解决方案3】:

    如果您想使用Math.pow

    public static long powerN(int number, int power) {
      return (long) Math.pow(number, power);
    }
    

    【讨论】:

      【解决方案4】:

      选项 1:将 Math.pow 的结果转换为 long:

      public class PowerCalculator{
      /**
       * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
       * 
       * @param number The number to take power.
       * @param power The power factor to be taken to.
       * @return The calculation result after taking power of the integer number.
       */
      public static long powerN(int number, int power) {
      
          // write your code after this line
          if (power < 0){
              return 1;
          } else{
              return (long) Math.pow(number, power);
          }
      

      选项 2:不使用 Math.pow

          public class PowerCalculator{
      /**
       * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
       * 
       * @param number The number to take power.
       * @param power The power factor to be taken to.
       * @return The calculation result after taking power of the integer number.
       */
      public static long powerN(int number, int power) {
      
          // write your code after this line
          long result = 1;
          while (power > 0) {
              result *= number;
              power--;
          }
          return result;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2012-07-06
        相关资源
        最近更新 更多