type unsigned long long
私はc/c++にn個とループを持っています
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
を使用するよりも大きな数値を出力することはできません。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
上記では、もちろん、「revert」は常に正の数を返す必要があります