在不使用 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
这是我遇到的问题:
创建传递两个正整数的方法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