当前位置: 首页 > 知识库问答 >
问题:

int中断我的for循环的最大值?

微生善
2023-03-14
       public void solve(int a) {
        double x = 2;
        double y = 0;
        double n = 0;
        double target = 0;
        double lcm = 0;
        for (int i = 1; i <= a; i++) {
            lcm = (i + 1) * i; 
            y = ((lcm * lcm) - x) / i;
            n = (y * i) + x;
            if (Math.sqrt(n) % (i + 1) == 0) {
                x = Math.sqrt(n);
                String answer = String.format("%.0f", y);

                System.out.println("this is i: " + i);
                System.out.println(answer);

            }
        }
    }
this is i: 46337
99495281029892
this is i: 46338
99501722706961
this is i: 46340
99514606895203
this is i: 65535
32769

对堆栈溢出进行快速搜索会发现数字65535与一个16位无符号int相关联,但java使用的是32位int。将类型更改为double有效,就像简单地循环100,000次并在没有代码逻辑的情况下打印一样。我知道100,000^2高于最大int限制,但在我的代码中这个值从来没有存储为int。这是怎么回事?

共有1个答案

夹谷硕
2023-03-14

以下行在将结果转换为double之前生成一个超出界限的int:

lcm = (i + 1) * i;

以上内容本质上与:

lcm = (double)((i + 1) * i);

int temp = (i + 1) * i;
lcm = (double) temp;
lcm = (i + 1.0) * i;
 类似资料:
  • 问题内容: 我创建的代码为我寻找回文数时提供了数千种解决方案。任务是找到可能的最高编号: 如何使代码仅显示for循环创建的最大值? 问题答案: 该答案在代码中描述为解决方案:

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两

  • 问题内容: 我有这个代码: 它显然不会编译,因为在匿名类中需要使用final。但是我不能将它定下来,因为事实并非如此。你会怎么做?一种解决方案是复制它,但我认为可能会有更好的方法: 编辑 只是为了清楚起见,为了示例,我在这里使用了Runnable,问题实际上是关于匿名类的,它可以是其他任何东西。 问题答案: 我认为您的解决方案是最简单的方法。 另一种选择是将内部类的创建重构为一个为您完成的工厂函数

  • 我对确定上述代码的BigO有点困惑。如果在最外层的循环中,则为(int x=1;x 然而,考虑到最外层循环迭代n 2次,这会改变bigO还是加法常数无关紧要的规则?最后,如果最内层循环迭代n 2次而不是n,会改变什么吗? 非常感谢。

  • 我有两个循环。在第一个循环中,我分割字段(分割)。在第二个循环中,我想打印新的字段值。只有0。我想知道循环有什么问题。我没有发现错误。:)我认为问题出在这方面: 我在Windows 7中使用Visual Studio 2013编程。 %lf输出(正确): %f输出(不正确):

  • 我正在编写一个代码,用户会被问到:“有多少个标记?”然后他们输入他们提到的分数。然后,它打印出最大标记和最小标记。 我不是最擅长编码的,所以我没有方向去寻找循环中的最大值和最小值。我找到了他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我查找了如何进行最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。