gpt4 book ai didi

python - Collat​​z C++ 代码的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:58 25 4
gpt4 key购买 nike

我正在解决一个问题,尽管我已经解决了(很长一段时间后)我想找出我的实现有什么问题。我在 Windows 中用 C++ 和 Python 编写了我的解决方案。我正在尝试为我的 Python 使用 codeskulptor,它给了我一些 TIMELIMITERROR。我切换到 C++ 语言,它给了我一些奇怪的错误。我启动了我的虚拟机,以便我试图找出我的 C++ 代码失败的原因(我使用 Borland 的 BCC32)。我可以检测到 Collat​​z 序列生成的长整型数字,这可能会使我的程序崩溃。在 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 的序列...也许它与 vector 容器大小有关??

最佳答案

因为您的 num 是一个 int,并且您在 Collat​​z 系列中的元素 991661525 之后对 837799 进行了溢出(所有操作都是使用 int 完成,因此在 num=num*3+1 中乘以 991661525*3+1 时会溢出;)。将函数定义中的num改为unsigned long

vector<unsigned long> collatz(unsigned long num)

它会起作用的!

关于python - Collat​​z C++ 代码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com