我知道答案可能很简单,但是我几乎已经筋疲力尽了,尽我所能尝试使用c ++所掌握的所有知识,但这并不多。据我所知,第一个函数有效,只是无法使循环终止。
#include <iostream>
#include <cstdlib>
using namespace std;
unsigned int reverseInt(unsigned int num)
{
unsigned int rem, reverse;
while(num > 0)
{
rem = num % 10;
reverse = reverse * 10 + rem;
num /= 10;
}
return reverse;
}
unsigned int generateSequence(unsigned int num, ostream& out)
{
unsigned int k = 0;
while(num != 1)
{
num = num + 4;
num = reverseInt(num);
k++;
out << ", " << num;
}
out << endl;
return k;
}
答案 0 :(得分:2)
代码很少有问题
reverse
变量即使在函数reverseInt
中也没有初始化。
num
变量未减少为1,循环不会终止。
答案 1 :(得分:1)
在分析逻辑时,似乎随着数字位数的增加,有限循环的结果会更高。
当4的总和达到以6结尾的数字时,您的应用程序将减少位数,但是由于您使用的unsigned int类型的范围更大。
如果您达到位数的阈值(会产生更多结果供编译器退出),例如5位数作为阈值,例如11111,应用程序将超时。
答案 2 :(得分:0)
您的问题主要是未初始化reverse
,至少在clang和gcc上,这意味着reverse
将被初始化为其最大值(2 ^ 64)。
这意味着您的循环永远不会结束,因为num越来越大,您将有很多整数溢出,但是由于num是从reverse
的返回值分配的,因此num永远不会达到1 >