【问题标题】:Unexpected mathematical outputs in JAVAJAVA 中的意外数学输出
【发布时间】: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,000p = 924,499函数返回-10代替1
这同样适用于n = 1,000,000p = 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


【解决方案1】:

在你的 java 函数中,你永远不会给 result 一个初始值。将数字添加到没有值的变量是什么意思?在 python 中,您将变量初始化为零值。你也应该在java中这样做。

它有时有效而有时无效的原因是没有赋值的变量的值取决于发生在存储变量的内存位置中的任何值。当该内存位置巧合地具有值 0 ,它经常有,你的功能按预期工作。当内存位置具有其他值时,您的函数没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2021-09-12
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多