C++ 程序中的意外计算
C++ Unexpected calculation in program
当我的程序 运行 的命令行参数为 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;
您可能还想在循环中添加终止条件。
当我的程序 运行 的命令行参数为 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;
您可能还想在循环中添加终止条件。