Collatz c++代码的问题



我正在解决一个问题,虽然我已经解决了(经过很长一段时间),我想找出我的实现出了什么问题。我在Windows上用c++和Python编写了我的解决方案。我试着用codeskulptor为我的Python工作,它给了我一些TIMELIMITERROR。我切换到c++语言,它给了我一些奇怪的错误。我启动了我的虚拟机,以便我试图找出为什么我的c++代码失败了(我使用了Borland的BCC32)。我可以检测到Collatz序列生成的长int数,这会使我的程序崩溃。在Linux下,我得到了几乎相同的错误,尽管我可以看到在Linux下,程序可以运行并且可以很好地处理长数字(使用g++编译器)。在Linux下工作,我可以使用我为windows开发的相同的Python程序,它工作起来很简单。我想知道为什么c++在Windows和Linux上都失败了。

in Python:
def Collatz(num):
    temp = []
    temp.append(num)
    while num> 1:
        num = num%2==0 and num/2 or num*3+1
        temp.append(num)
    return temp
in C++:
vector<unsigned long> collatz(int num)
{
    vector<unsigned long> intList;
    intList.push_back(num);
    while(num>1)
    {
        if (num%2==0) num /=2;
    else num=num*3+1;
    intList.push_back(num);
    }
    return intList;
}

这两段代码只是函数:

奇怪的是,这两个代码都可以很好地计算13或999999的序列。但是,例如c++无法计算837799的序列…也许这与矢量容器大小有关??

因为您的numint,并且您在837799的Collatz系列中的元素991661525之后获得溢出(所有操作都是用int完成的,因此在num=num*3+1中乘以991661525*3+1时会溢出;)。将函数定义中的num更改为unsigned long

vector<unsigned long> collatz(unsigned long num)

,它会工作!

最新更新