トピックリンク:http://acm.zzuli.edu.cn/problem.php?id=2624
タイトル説明
Hは、特に様々な追加で、アルゴリズムのような非常に小さいです。はい添加は、バイナリ全加算器、セミアディティブなどの多様を含んでいます。
全加算器の2つの入力データビットが追加され、結果の出力とキャリービットは、加算器は、キャリ入力を有します。
半加算器の2つの入力データビットの和は、結果の出力及びキャリービット加算器のキャリー入力は存在しません。XOR演算は半加算器です。Cは、「^」を排他的論理和演算子である
が、10進加算され、一般的に、人々は小数で使用され、デフォルトではすべての小数の桁です。数日前、私は、ADDのスターを行ってきました、小さなHのADDスターが新たに追加を持って聞きました。彼は、ADDの星の世界で見つかった、各番号は、この奇妙で厄介な番号が呼ばれ、すべての六角は異なる可能性が「数を追加します。」例えば、「0687 ...」の最下位ビットを表すことは、7進数である、第2のビットはオクタルの逆数である、3ビットのバイナリ数は6、第4号である10進数である、など。各ビットは、0バイナリまたはd(10進数)、または範囲[2,9]区間内の整数です。理論的にはこれは、集計が与えられていないに、小数であるとみなされ、数字の集計無限の数に含まれなければなりません。
全加算器の2つの入力データビットが追加され、結果の出力とキャリービットは、加算器は、キャリ入力を有します。
半加算器の2つの入力データビットの和は、結果の出力及びキャリービット加算器のキャリー入力は存在しません。XOR演算は半加算器です。Cは、「^」を排他的論理和演算子である
が、10進加算され、一般的に、人々は小数で使用され、デフォルトではすべての小数の桁です。数日前、私は、ADDのスターを行ってきました、小さなHのADDスターが新たに追加を持って聞きました。彼は、ADDの星の世界で見つかった、各番号は、この奇妙で厄介な番号が呼ばれ、すべての六角は異なる可能性が「数を追加します。」例えば、「0687 ...」の最下位ビットを表すことは、7進数である、第2のビットはオクタルの逆数である、3ビットのバイナリ数は6、第4号である10進数である、など。各ビットは、0バイナリまたはd(10進数)、または範囲[2,9]区間内の整数です。理論的にはこれは、集計が与えられていないに、小数であるとみなされ、数字の集計無限の数に含まれなければなりません。
エントリー
まず、最初のタブにNビットの行(0 <N <= 20)、キャリッジリターンで終わります。続いて二列は、各列は、複数の追加のNビットの負でない数以下で与えられます。
輸出
出力の数と行に2つの追加。
サンプル入力
のコピー
7170687
03236
445
サンプル出力
のコピー
4104
プロンプト
たとえば、「0687」にタブに相当するが、どのように「3236 + 445」の平均を計算するには?まず、最低レベル計算した:6 + 5 = 11; 7最下位ビットがバイナリ、4であり、我々はキャリーを得るようにするからです。最後から二番目の2:4 + 3 + 1(キャリー)= 8;これは8進数であるため、我々は0とキャリーを得るように。ビット3:4 + 2 + 1(キャリー)= 7; 6我々は1とキャリーを得るように、このビットは、小数であるためです。最初の4つは:3 + 1(キャリー)= 4;我々は7を得るように、このビットは、小数であるためです。最後に、我々が得る:+ 445 = 4104 3236。
実際には、変形が大きな整数の加算である、私は別のブログ記事で午前とテンプレートがありました、あなたが参照できる
https://www.cnblogs.com/shuitiangong/p/12063528.html
書式#include < 設定 > 書式#include <マップ> 書式#include <スタック> の#include <キュー> の#include <cmath> の#include <cstdioを> する#include <CCTYPE> 書式#include < 文字列 > の#include <ベクトル> の#include <climits> #include <CStringの> する#include <cstdlib> の#include <iostreamの> する#include <アルゴリズム> の#define MAX(A、B)(> B:B) の#define分(A、B)(<B? :B) の#define MST()のmemset(0、 sizeof()) の#define_testのprintf( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \ n "は) 使用して 名前空間はstdを、 typedefの長い 長いLL。 ペアのtypedef < int型、int型 > P; constの ダブル EPS = 1E- 7 。 const int型 INF = 0x3f3f3f3f 。 constの LL ll_INF = 0x3f3f3f3f3f3f3f 。 const int型 MAXN = 1E3 + 10 。 チャー LS [ 20 ]。 チャーNUM1 [MAXN]、NUM2 [MAXN]、RES [MAXN]。 空アドオン(){// 高精度整数加法(改) MST(RES); INT LEN1 = STRLEN(NUM1)。 INT LEN2 = STRLEN(NUM2)。 INT len3 = STRLEN(LS)。 逆(NUM1、NUM1 + LEN1)。 逆(NUM2、NUM2 + LEN2)。 int型のlen、キャリー。 LEN =キャリー= 0 。 以下のために(INT iが= 0 ; iが<LEN1 || I <LEN2; ++ I){ キャリー + = I <LEN1?NUM1 [I] - ' 0 ':0 ; 運ぶ= I + <LEN2 NUM2 [I] - ?' 0 ':0 ; IF([LEN3-I- LS 1!] = ' 0 '){ // 非〜9 0 2は、バイナリである RES [LEN =キャリー付き%(LS [LEN3-I- 1 ] - ' 0 ')+ ' 0 ' ; キャリー付き / =(LS [LEN3-I- 1 ] - ' 0 ' ); } 他 { // へプレスに10 0調製 RES [LEN]キャリー=%と10 + ' 0 '; キャリー付き / = 10 ; } ++ でlen; } IF(キャリー付き)//は、最後に決定carry-ない + =キャリー付きRES [LEN ++] ' 0 ' ; RES [LEN] = 0 ; のために(INT I = LEN - 1。 ; I> 0 ;株式会社(www.i-levelmedia.com)){ //はパイロットの注目の影響が直接0 I> = 0、エラーが発生した場合、結果は0に正確に等しいされていない除外 IF(RES [I] == ' 0 ' ) RESを[ I] = 0 ; 他 BREAK ; } (RES、RES逆 + STRLEN(RES))。 } INTメイン(ボイド){ scanf関数(" %S%S%S " 、LS、NUM1、NUM2)。 追加(); printf(" %sの\ n " 、RES)。 リターン 0 ; }