我有type unsigned long long
的n
和c / c ++中的循环
while( n < ULLONG_MAX ){
...
n += revert( n );
}
我需要在它变得非常大之前输出最后的n,有没有办法可以验证并打破循环?因为我一直输出大的相同数字但小于ULLONG_MAX
答案 0 :(得分:2)
如果n
为unsigned 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'总是返回正数,当然