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

为什么在for循环中使用long而不是int会给我不同的答案(最长的Collatz序列)

羊舌兴文
2023-03-14

我对java编程语言是新手。为什么在这段代码中有不同的输出?能给我解释一下问题吗?非常感谢。公共类Collatz{

public static void main(String[]arguments)
{   int max=0;
    int real=0;
    int a=0;



    for (int i=2;i<1000000;i++)
    {   
        real=i;
        int count=1;
        while(real>1)
        {
            if(real%2==0)
            {
                real=real/2;


            }
            else
            {
                real=3*real+1;


            }
            count++;
            }
            if(count>max){max=count;a=i;}
        }
        System.out.println(a+"&"+max);}
public static void main(String[]arguments)
{   long max=0;
    long real=0;
    long a=0;



    for (int i=2;i<1000000;i++)
    {   
        real=i;
        int count=1;
        while(real>1)
        {
            if(real%2==0)
            {
                real=real/2;


            }
            else
            {
                real=3*real+1;


            }
            count++;
            }
            if(count>max){max=count;a=i;}
        }
        System.out.println(a+"&"+max);}

共有1个答案

仉运乾
2023-03-14

为此,您实际上只需要查找这两种变量类型的范围:http://www.cafeaulait.org/course/week2/02.html

为了简单起见:这里计算的值对于整数来说肯定太长了,因为它从-2,147,483,648到2,147,483,647,而且很可能在很长一段时间内都是一样的。

 类似资料:
  • 问题内容: 我在程序中看到了与程序中此特定循环相关的不同行为,但我不确定我为什么理解它的行为方式。 的输出是 的输出是 我去网上看了以下内容 在切片上进行测距时,每次迭代都会返回两个值。第一个是索引,第二个是该索引处的元素的副本 它说一个副本,这是否意味着它返回了字符串的副本,但这实际上是指向变量的指针?在这种情况下,在循环结束时对will的任何引用都实际上引用了数组中的最后一个元素,例如?这是否

  • 我想应用Collatz序列并将其应用于从1到10^6的所有数字,返回达到1所需的链最大的数字。然而,我有一个问题,我的循环似乎没有在Eclipse中终止,我不知道为什么,我甚至不能得到控制台中显示的所有打印,尽管每一步都想要它。 collatz序列是通过以下规则计算的: > 如果n为奇数,则下一个数为n/2 如果n为偶数,则下一个数为3n+1

  • 问题内容: 为什么不: 代替: 获得唯一哈希码的更高机会? 问题答案: 因为数组的最大长度为。 由于的主要用途是确定将对象插入/ 的后备数组中的哪个插槽,因此hashcode> 将无法存储在该数组中。

  • 问题内容: 我也在学习Java和android。我们可以在while循环中执行的几乎所有事情都可以在while循环中执行。 我发现一个简单的条件,使用while循环比for循环更好 如果我必须在程序中使用counter的值,那么我认为while循环要比for循环好 使用while循环 在这种情况下,我发现while循环要比for循环好,因为如果要在for循环中实现相同的效果,则必须将counter

  • 问题内容: 我一直在使用“ if”来测试自己的版本,并且一切似乎都正常。当然,如果使用signalAll()而不是signal(),这将导致严重崩溃,但是如果一次仅通知一个线程,这怎么会出错? 他们的代码在这里 -检查put()和take()方法;在Condition的JavaDoc顶部可以看到一个更简单,更重点的实现。 下面是我实施的相关部分。 PS我知道,通常,尤其是在这样的lib类中,应该让

  • 我正在努力解决这个问题1438。绝对差值小于或等于极限的最长连续子阵列。我明白了逻辑,但有一个非常奇怪的问题,我不得不拉扯头发两个多小时。 代码如下:- 您可以看到,当我将一个整数放入每个队列时,代码运行良好,但当我将一个int放入三个队列时,我得到一个TLE。因此,在下面的代码中,如果temp是,则代码通过,但当temp是时,它会给出一个TLE。有人能解释一下发生了什么吗?