C++ 程序中的意外计算

C++ Unexpected calculation in program

本文关键字:意外 计算 程序 C++      更新时间:2023-10-16

当我的程序使用命令行参数(如 60)运行时,第一个计算是错误的,但其余的似乎是正确的。我想我在main()函数中有一个错误,但我找不到它。在 Linux 60 上提供 ~30000 步,在 Windows 上显示 ~-7000000 步。

#include <iostream>
#include <cstdlib>
using namespace std;
void printcollatz( int i ) {
    int count;
    int originalnumber = i;
    int workingnumber = i;
    while( workingnumber >= 1 ) {
        if( workingnumber == 1 ) {
            cout << originalnumber << " takes " << count << " steps" << endl;
            count = 0;
            break;
        }
        if( workingnumber % 2 == 0 ) {
            workingnumber /= 2;
            count++;
        }
        else {
            workingnumber = ( 3 * workingnumber ) + 1;
            count++;
        }
    }
}
int main( int argc, char* argv[] ) {
    int incrementnumber;
    if( argc > 1 ) {
        if( atoi( argv[1] ) == 0 ) {
            incrementnumber = 2;
        }
        else {
            incrementnumber = atoi( argv[1] );
        }
    }
    while( 1 ) {
        printcollatz( incrementnumber );
        incrementnumber++;
    }
    return 0;
}

您需要初始化计数:

int count = 0;

此外,您可能还希望向循环添加终止条件。