2017-06-14 14 views
0

今日私はインタビューを受けて、インタビュアーは2つの数字の追加のためのプログラムを作るように頼んだので、どうやって簡単な質問をすることができますか?あなたはそれをintに変換する場合の問題は、次の場合、二重、長いダブル、2つの数字を追加すると、数字の長さが非常に大きくなることがあります

  • 2数の長さは(など10,20,30あるいは1000)何もすることができます

    異なっています答えが間違っている可能性があります。

質問のお手伝いをしてください。

+0

リンク先をご指定ください。 –

+0

タグで重複のヒープを見つけることができます[tag:bigint] –

+0

無限の長さの数字ですか? [Knuth](https://en.wikipedia.org/wiki/Algorithm_characterizations#1968.2C_1973_Knuth.27s_characterization)によると、 "アルゴリズムは常に有限個のステップ数の後に終了しなければならない"ため、そのようなアルゴリズムは存在しない可能性があります。どのような愚かな人が、有効なアルゴリズムがないプログラムを書くように頼むのですか?彼らは恣意的だが有限の長さの数を加える方法を求めていないと確信していますか? – pjs

答えて

1

あなたはいつでも配列の2つの数字(配列は要素の数字の桁)を持ち、手作業で追加するように追加することができます。すなわち、桁から開始してキャリーを保存し、 、そして100桁の数字などがあります。

は、初期設定(あなたはあなたが1の桁(右端または最後の要素)で始まり123と329

X = 123, X[] = [1,2,3] 
Y = 329, Y[] = [3,2,9] 

を追加し、両方のXとYの配列の要素を追加し、それにキャリーを追加したいと言います0にする)。加算が10より大きくなる場合は、carry = sum/10と設定します(各要素を追加するため、このキャリーは常に0または1のいずれかになります)。add [i] = sum % 10に加算します。小さな配列のすべての要素が終わるまで繰り返す。次に、上記のロジックを続行している大きな配列の残りの要素にキャリーを追加します。

carry = 0 
Step 1 : 3 + 9 + carry (0) = 5, carry => 12/10 = 1, add => 12 % 10 = 2 
Step 2 : 2 + 2 + carry (2) = 6, carry => 6/10 = 0, add => 6 % 10 = 6 
Step 3 : 3 + 1 + carry (0) = 4, carry => 4/10 = 0, add => 4 % 10 = 4 

アンス= 462

明らか合計を格納配列は、余分な1桁を有することができるので、同様にそのの世話をします。

+1

しかし、私たちが桁上げを保存した場合、私たちはこの桁上げがどのインデックスかを認識します。 –

+0

キャリーを1つだけ必要とし、それぞれの対応する桁を追加した後にゼロまたは1に設定します。 –

+0

@JeeVanTiWari答えに例を追加しました。コードに変換するのは簡単です。 –

関連する問題