2

type unsigned long long 私はc/c++にn個とループを持っています

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

最後のnが大きくなる前に出力する必要がありますが、ループを確認して中断する方法はありますか?いつも同じ数が出力されますが、ULLONG_MAXより少ないからです

4

2 に答える 2

2

の場合nは常に真ですunsigned long longn <= ULLONG_MAX

revertそれが常に正の数を返すことがわかっている場合は、がそうであるかどうかを確認できn + revert( n )ます< n(つまり、ラップアラウンドを確認します)。または、それも確認してくださいrevert(n) < ULLONG_MAX - n

于 2012-10-20T12:03:25.250 に答える
1

値を格納するためにULLONG_MAXを使用するよりも大きな数値を出力することはできません。unsigned long long

運が良ければ、関数は( )revertとまったく同じ値を取得しますが、nそれ以上にしようとすると、ゼロから始めて値がラップされます(整数オーバーフローと呼ばれます)。ULLONG_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 に答える