我type unsigned long long
在 c/c++ 中有 n of 和一个循环
while( n < ULLONG_MAX ){
...
n += revert( n );
}
我需要在最后一个 n 变大之前输出它,有没有办法可以验证和打破循环?因为我总是输出相同的大数字,但少于 ULLONG_MAX
如果n
是,unsigned long long
那么n <= ULLONG_MAX
总是正确的。
如果你知道它revert
总是返回一个正数,你可以检查是否n + revert( n )
是< n
(即检查环绕)。或者也检查一下revert(n) < ULLONG_MAX - n
。
您将永远无法输出比ULLONG_MAX
使用 aunsigned 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
上面要求'revert'总是返回一个正数,当然