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



这是给我的问题:

创建传递两个正整数的lastDigit方法。第一个整数是底数,第二个整数是指数。lastDigit将返回底数^指数的最后一位。在编写代码之前,您需要考虑一下。提示:实际上不需要求底数^指数的乘积

然后我需要用这个方法找到下面问题的答案:

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型的慢性限制所致。

症状包括

  • 应该是正数的负整数

  • 应该是大的小数字

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

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

*的副作用可能包括沮丧,把你的电脑扔出窗外,和/或删除重要的系统文件。

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

7 = 7

7 * 7 = 49

49 * 7 = 343

最后一位是3

但是,如果只取两个操作之间的最后一位,

7*7 =49 -> 9

9 * 7 = 63

最后一位仍然是3。

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

这是p=(p*m)%10;溶液的实际情况:

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

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

最新更新