在更大的数字上打破循环,然后是无符号的long long

时间:2012-10-20 12:02:11

标签: c++ c

我有type unsigned long long的n 和c / c ++中的循环

while( n < ULLONG_MAX ){
...
n += revert( n );
}

我需要在它变得非常大之前输出最后的n,有没有办法可以验证并打破循环?因为我一直输出大的相同数字但小于ULLONG_MAX

2 个答案:

答案 0 :(得分:2)

如果nunsigned long long,则n <= ULLONG_MAX始终为真。

如果您知道revert始终返回正数,则可以检查n + revert( n )是否为< n(即检查环绕)。或者还要检查revert(n) < ULLONG_MAX - n

答案 1 :(得分:1)

您永远无法使用ULLONG_MAX输出大于unsigned long long的数字来存储您的值。

如果您很幸运,您的功能revert将获得与n ULLONG_MAX完全相同的值std::numeric_limits<unsigned long long>::max ()if (n > (n + revert (n))) break; // max of 'n += revert (n)' found ),但尝试更高一些将只包裹从零开始的值(所谓的整数溢出)..

您可以执行以下操作来检查包装:

{{1}}

以上要求'revert'总是返回正数,当然