【发布时间】:2022-11-10 06:04:57
【问题描述】:
我做了这个java函数:
public static int powerPrime(int n, int p){
int k = p;
int result;
while(n/k != 0){
result += n/k;
k *= p;
}
return result;
}
大多数时候,它会返回预期的输出。但是有时它会返回奇怪的值。
例如:
为了n = 1,000,000和p = 924,499函数返回-10代替1
这同样适用于n = 1,000,000和p = 900,971当函数返回-12而不是 1。
当我在 stackoverflow 中搜索时,我发现的只是人们遇到这类问题,因为他们使用了超过 int 限制的非常大的数字,但这似乎不是我的问题,因为使用的数字小于2,147,483,647这是java中的int限制。
问题似乎也不是我使用的逻辑,因为我在 python 中创建了相同的函数,如下所示并且它有效
def power_prime(n, p):
k = p
result = 0
while n//k:
result += n//k
k *= p
return result
【问题讨论】:
-
仅仅因为输入数字小于 2,147,483,647 并不意味着结果将小于值。
-
“在我的情况下,这似乎不是问题,因为使用的数字小于 2,147,483,647...”开头),那么如果你通过 p = 924,499,你还认为 924,499 * 924,499 小于最大 int 数吗?
-
哦,是的,你们是绝对正确的,伙计们,我怎么会错过这一点。非常感谢。
标签: java arithmetic-expressions integer-arithmetic