While循环功能未终止

时间:2020-02-21 16:15:11

标签: c++ while-loop

我知道答案可能很简单,但是我几乎已经筋疲力尽了,尽我所能尝试使用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;
}

3 个答案:

答案 0 :(得分:2)

代码很少有问题

  1. reverse变量即使在函数reverseInt中也没有初始化。

  2. num变量未减少为1,循环不会终止。

答案 1 :(得分:1)

在分析逻辑时,似乎随着数字位数的增加,有限循环的结果会更高。

当4的总和达到以6结尾的数字时,您的应用程序将减少位数,但是由于您使用的unsigned int类型的范围更大。

如果您达到位数的阈值(会产生更多结果供编译器退出),例如5位数作为阈值,例如11111,应用程序将超时。

答案 2 :(得分:0)

您的问题主要是未初始化reverse,至少在clang和gcc上,这意味着reverse将被初始化为其最大值(2 ^ 64)。

这意味着您的循环永远不会结束,因为num越来越大,您将有很多整数溢出,但是由于num是从reverse的返回值分配的,因此num永远不会达到1

相关问题