我正在尝试使用VS2010 c++解决3n + 1问题,在较小的输入中效果很好,但是当达到113383时会溢出。

这是problem link

这是我用来解决此问题的代码:

#include <iostream>
using namespace std;
int main(void) {
    while (!cin.eof()) {
        int i, j, maxCycle = 0, tmaxCycle = 0;
        cin >> i >> j;
        for (int x = i; x <= j; x++) {
            int n = x;
            tmaxCycle = 0;
            while (n != 1) {
                if ((float)(n/2) != (n/2.0)) {
                    n = 3*n + 1;
                }
                else {
                    n /= 2;
                }
                tmaxCycle += 1;
                if (n < 0) {
                    int blah = 0; //just for the breakpoint
                }
            }
            tmaxCycle += 1;
            if (tmaxCycle > maxCycle) {
                maxCycle = tmaxCycle;
            }
        }
        cout << i << "\t" << j << "\t" << maxCycle << endl;
    }
    system("pause");
}

我在第15行做了一个断点,在这一点上值溢出了
n=-1812855948

最佳答案

使用64位无符号整数。如果这些溢出,请使用像GNU Multiple Precision Library这样的bignum库。 Bignums给您无限的精度和尺寸。

10-04 13:13