在不使用 Math.pow() 的情况下获取方法中的指数

Getting exponents in a method without using Math.pow()

这是我遇到的问题:

创建传递两个正整数的方法lastDigit。第一个整数是基数,第二个整数是指数。 lastDigit 将 return base^exponent 的最后一位。在编写代码之前,您需要思考。提示:您不需要实际找到 base^exponent 的乘积。

然后我需要使用该方法来查找以下问题的答案:

1) 3^400的最后一位是多少? 2) (3^0)(3^1)(3^2)(3^3)…(3^10)的最后一位是多少? 3) (3^0)(3^1)(3^2)…..(3^400)的乘积最后一位是多少?

这是我写的代码:

public static int lastDigit(int m, int n){
    int p=1;
    for(int i=1; i<=n; i++)
        p=p*m;
    return p%10;
}

但是,当我试图找到问题的答案时,第一题和第三题的答案都是 -1,第二题的答案是 1。代码有问题吗,或者我怎样才能得到正确的答案?

int 变量溢出。尝试将 p=p*m 更改为 p=(p*m)%10.

您或您编写的程序可能遇到整数溢出问题。

这是由于 int 类型的慢性限制引起的。

症状包括

  • 本应为正的负整数

  • 应该是大的小数字

可以通过确保您的 int 值不超过 20 亿来控制这种情况。

如果症状持续存在,请查看调试器,或打印出中间值。

*副作用可能包括挫败感,使您的计算机崩溃 window,and/or 删除重要的系统文件。

但实际上,假设您的底数是 7。

7=7

7*7=49

49*7=343

最后一位数字是 3。

但是,如果您只取操作之间的最后一位数字,

7*7 =49 -> 9

9*7=63

最后一位还是三

这样做可以使数量远低于 int 限制。

这实际上是 p=(p*m)%10; 解决方案:

p=           (p*m)                                    %10      
  multiply the previous digit by the exponent      take the last digit