C++ Project Euler:#14整数溢出和堆栈溢出 无符号长周期; 无符号长-长试验; 无符号长数字=1; 无符号长最大值=0; //cout

C++ Project Euler:#14整数溢出和堆栈溢出 无符号长周期; 无符号长-长试验; 无符号长数字=1; 无符号长最大值=0; //cout,c++,C++,这是最重要的。考虑通过存储所看到的链的长度来解决这个问题(例如,如果6给了一个链长为7,当处理n时,你会遇到6个,那么你可以只添加7到目前为止的链长度并立即返回)。.我以前在处理0到1000000之间的结果时,使用缓冲区来存储之前得到的结果,但是发生了堆栈溢出。也许可以将该代码添加到票据中?请参阅相关票证以获取示例解决方案。虽然问题众所周知,但对于每个在Project Euler上浪费时间的人来说,这看起来都是一个破坏性的解决方案! unsigned long long terms; unsig

这是最重要的。考虑通过存储所看到的链的长度来解决这个问题(例如,如果6给了一个链长为7,当处理n时,你会遇到6个,那么你可以只添加7到目前为止的链长度并立即返回)。.

我以前在处理0到1000000之间的结果时,使用缓冲区来存储之前得到的结果,但是发生了堆栈溢出。也许可以将该代码添加到票据中?请参阅相关票证以获取示例解决方案。虽然问题众所周知,但对于每个在Project Euler上浪费时间的人来说,这看起来都是一个破坏性的解决方案!
unsigned long long terms;
unsigned long long test;
unsigned long long digit = 1;
unsigned long long max = 0;

//cout<<sizeof(long)<<" "<<sizeof(int)<<endl;
//cout<<digit<<endl;
for(;digit<1000000;++digit)
{
    terms = 1;
    test = digit;
    while(test>1)
    {
        if(0==(test%2))
        {
            test /=2;
        }else{
            test = test *3 +1;
        }
        terms ++;
    }   
    if(terms>max)
        max = terms;
}
//terms = get_chain_length();

/*if(terms>max)
        max = terms;*/
//cout<<sizeof(long long)<<endl;
cout<<max<<endl;