gpt4 book ai didi

c++ - 检查计算是否会导致溢出c++

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:15 25 4
gpt4 key购买 nike

我在 collat​​z() 中添加了 elseif 语句来检查 workingnumber * 3 + 1 是否会超过 INT_MAX 但是当运行程序时,一些不应超过 INT_MAX 的数字被报告为这样做。我可能不需要施放 INT_MAX 但我不确定。

#include <iostream>
#include <cstdlib>
#include <climits>

using namespace std;

void collatz( int startingnumber ) {

int count = 0;

int originalnumber = startingnumber;

int workingnumber = startingnumber;

while( workingnumber >= 1 ) {

if( workingnumber == 1 ) {

cout << originalnumber << " takes " << count << " steps" << endl;

count = 0;

break;
}

if( workingnumber % 2 == 0 ) {

workingnumber /= 2;

//optional
//cout << originalnumber << " is at " << workingnumber << endl;

count++;
}
else if( ( ( long int ) workingnumber * 3 ) + 1 > ( long int ) INT_MAX ) {

cout << originalnumber << " will cause a buffer overflow" << endl;

break;
}
else {

workingnumber = ( 3 * workingnumber ) + 1;

//optional
//cout << originalnumber << " is at " << workingnumber << endl;

count++;
}
}
}

int main( int argc, char* argv[] ) {

int increment = 2;

if( argc > 1 ) {

if( atoi( argv[1] ) != 0 ) {

increment = atoi( argv[1] );
}
}

while( increment <= INT_MAX ) {

collatz( increment );

increment++;
}

return 0;
}

最佳答案

当您需要对大数进行运算时,最好使用任意精度的算术库,例如 GNU MPFR .

这样,您就不必担心整数溢出。

关于c++ - 检查计算是否会导致溢出c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265645/

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