断开循环,超过长时间的未签名

Break loop on greater number then unsigned long long

本文关键字:长时间 循环 断开      更新时间:2023-10-16

我有 type unsigned long long的n和c/c

中的循环
while( n < ULLONG_MAX ){
...
n += revert( n );
}

我需要在最后n个变大之前输出它,有没有办法验证和打破循环?因为我一直都会输出相同的数字,但更少的是ullong_max

如果 nunsigned long long,则 n <= ULLONG_MAX始终是正确的。

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

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

如果您很幸运,您的功能revert将使您与n的值与ULLONG_MAXstd::numeric_limits<unsigned long long>::max ())完全相同,但是尝试提高任何更高的值只会从零开始(所谓的 integer溢出))..

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

if (n > (n + revert (n)))
  break; // max of 'n += revert (n)' found

以上要求"还原"总是返回一个正数,当然