0

2つの数字を加算したときにキャリーが発生するかどうかを確認したい。両方の数値が 0 ~ 9 の範囲にあると仮定します。

私たちの制約:

  1. 結果が 9 を超えたり 0 を下回ったりする演算は使用できません。
  2. 0 ~ 9 の範囲外の数値は使用できません。
  3. 浮動小数点演算や数値は使用できません。

たとえば、if (a+b > 9) then print("there is a carry."); as, as if a=9and b=6thenは使えませんa+b = 15。15 は範囲外です。

効率的な方法はありますか?ある場合は、キャリーの合計を確認する効率的な方法に答えてください。(上記の制約を考慮してください)

4

4 に答える 4

4
b = 9-b;
a = 0+a;
if (a > b) return true

それがあなたが得ることができる最も効率的なものだと確信しています。

編集:

2 行目は役に立たないので、2 行だけでループなしで完了です。オリジナルを削除しているわけではありません。

于 2013-05-01T19:49:43.947 に答える
1

@Tomcatがこれのパターンを見つけたのは良いことですが、ブルートフォースはそれほど悪くない場合もあります. 入力が [0,10] の範囲の整数である場合、10*10 ブール値ルックアップ テーブルを作成できます。わずかに高速であっても、ルックアップ テーブルを使用するのは無意味な最適化になる可能性がありますが、単一の減算を実行して違いをベンチマークすることは興味深いでしょう。

于 2013-05-01T19:39:54.107 に答える
1

疑似コードで

while a != 0
    if(b == 9) return true
    b++;
    a--;
end

return false;
于 2013-05-01T19:38:34.430 に答える
1

ここに1つのルールがあります

If a >= b and b >=5 then there is a carry
于 2013-05-01T19:38:52.193 に答える