2

type unsigned long long 在 c/c++ 中有 n of 和一个循环

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

我需要在最后一个 n 变大之前输出它,有没有办法可以验证和打破循环?因为我总是输出相同的大数字,但少于 ULLONG_MAX

4

2 回答 2

2

如果n是,unsigned long long那么n <= ULLONG_MAX总是正确的。

如果你知道它revert总是返回一个正数,你可以检查是否n + revert( n )< n(即检查环绕)。或者也检查一下revert(n) < ULLONG_MAX - n

于 2012-10-20T12:03:25.250 回答
1

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

如果你很幸运,你的函数会得到与( )revert完全相同的值,但尝试更高的值只会从零开始环绕值(所谓的整数溢出)。nULLONG_MAXstd::numeric_limits<unsigned long long>::max ()

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

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

上面要求'revert'总是返回一个正数,当然

于 2012-10-20T12:08:06.453 回答