2011-12-20 15 views
2
for (long long j = factored_num/3; j > 2 || factored_num != 1; j -= 2) { 

64ビットコンピュータでは、数値を因数分解しようとしています。 long long j = factored_numの場合、このコードは正常に動作しますが、整数除算を行うとcout << jjが負であることを示しています。オーバーフローしていると仮定しています。これをどうすれば解決できますか?なぜ私の長い整数オーバーフロー/整数除算で負になっていますか?

型問題の場合は、3LLj-= 2LLなどを試しました。繰り返しますが、間違いなく分割部分と関係していますが、すぐに問題を解決するためのデータ型に慣れていません。

+4

'factored_num'の種類は何ですか? – unwind

+0

と 'factored_num'初期値?あなたはそれを初期化しましたか? –

+2

ループ全体を表示しなければなりません。ところで、各要因が「factored_num」を減らし、小さな要因が大きな要因よりも早く見つかる可能性があるため、増加する順序で要因を探す方が良いです。また、 'factored_num/3'ではなく、' factored_num'の平方根( 'j * j <= factored_num')まで検索するだけです。 – TonyK

答えて

2

問題が最終条件になる可能性があります。 jが2より大きい場合またはfactored_numが1でない場合、ループは終了せず、jは負の数に減少し続けます。

私は条件がj > 2 && factored_num != 1ことを期待したい、それはあなたが終わりにしたいですjがある場合は2以下(理由2; 2が有効な要因である)、またはfactored_numがこれ以上ありませんので1である(と因子)。

関連する問題