説明[タイトル]
少ない200ビットより2非負整数の和の製品。
[Enter]を
ない以上200以下の2行は余分なゼロをリードする非負の整数が、あります。
[出力]
ライン、すなわち、乗算結果。結果は余分であること、0をリードした結果が342であれば、あなたは0342に出力することはできませんすることはできません。
[サンプル入力】
12345678900 98765432100
[サンプル出力]
1219326311126352690000
コード
#include <iostreamの>
する#include <cstdioを> する#include <cmath> の#include <CStringの> する#include <cstdlib> の#include <アルゴリズム> 使用して名前空間をSTD 。INT メイン(){ 文字a1の[ 201 ]、B1 [ 201 ]。INT [ 201 ] = { 0 } 、B [ 201 ] = { 0 } 、C [ 10001 ] = { 0 } 、レナ、LENB、lenc 、I 、J 、X ; scanf関数("%s"は、A1 )。scanf関数("%s"は、B1 )。レナ= STRLEN (A1 )、LENB = STRLEN (B1 )。以下のための(iは= 0 ; I <レナI; ++)[レナ-i ] = A1 [I ] - 48 。以下のために(私は= 0 ; I <LENB ; I ++)Bは[LENB -i ] = B1 [I ] - 48 。以下のために(私は= 1 ; I <=レナ; I ++){X = 0 ; のための(INT J = 1。; J <= LENB ; J ++){C [I + J -1 ] = C [I + J -1 ] + X + A [I ] * B [J ]; //ビットの代わりに乗算の乗算が、それぞれが乗算しなければならないので、第1のビットI + J-1であるものを、法律、見つけるためにIビットこれができるとは限らないだけ1回jビットの数と吸引物、。しかし、注目すべき最も重要な点は、元の番号を追加することです。
例えば、2桁が2桁を乗じ、垂直列を計算し、次いで場合、結果は実際には第二プラス倍元は最初の番号廃棄することができないX = C [I + J -1 ] / 10 ; C [IJ + -1 ]%= 10 ; } C [I + LENB ] = X ; } lenc =レナ+ LENB 、乗算器の最大値ではないつ以上の桁、例えば、99 * 99、4つのそのような結果。なぜ?あなたは見ていない、あなたは5を持っていると仮定し、その結果が10,000以上でなければなりませんが、9900の前にも、99 * 100、及び* 99 99それぞれは、まだ何より、最大数を取っている間(C [lenc ] = = 0 && lenc > 1 )lenc - ; のための(I = lenc ; I > = 1 ; I - )COUT << C [I ]; 戻り0 ; }