この問題は、デジタル暗号化の方法を達成するために必要。まず、任意の正の整数Bのために、固定された正整数Aで暗号化し、次の動作にデジタル1ビットに対応した位置のそれぞれの数字は:奇数のビットの後、デジタル和の対応するビットが13を法 - - 10ここでJ、Q 11、K 12表す代表の代表を使用;結果が否定的である場合でもビットで、数Bマイナスの数で、次に10を追加します。ここでは最初のものを作るために少し。
入力フォーマット:
1つの行に順次入力AおよびBに与えられ、これ以上100以下は、隙間によって分離された正の整数、ではありません。
出力フォーマット:
出力は、一列に暗号化されます。
サンプル入力:
1234567 368782971
出力例:
3695Q8118
分析:
1. Aが長さBよりも長い場合、補体高いB 0。高いゼロパディングの長さBが長さA未満である場合、Aは、(ピットがあることに注意してください!)
現在のビットを記録するカウント= 1が奇数又は偶数ビットであると前記第1ビット(奇数)のビットは、その後、端から文字列を横切ります
NEWSTRINGに文字列[RES]を保存するために、0-K、演算結果RESを保持する文字列を図3に示すように、最後は出力NEWSTRINGを逆転することができるであろう
4.ハング:私は、テストカードを開始し、テストポイント5ポイント2を、これら2つのテスト点BがAよりも長い、I BはBまでの非常に高い、コードの長さを循環するあります更新するための0の後に、長さB LENGTHB = a.sizeを();
C ++の実装:
1の#include <iostreamの> 2の#include <ベクトル> 3の#include < ストリング > 4 使って 名前空間STDを、 5 6 INT )(メイン 7 { 8 列A、B。 9 ベクトル< チャー > NEWSTRING。 10 文字列 NUM = " 0123456789JQK " 。 11 CIN >> A >> B。 12 INT lengthA = A.size()。 13 INT LENGTHB = B.size()。 14 int型のres = 0 ; 15 であれば(lengthA < LENGTHB) 16 { 17 // A:001234567 18 // B:368782971 19 // 短的补零 20 A.insert(0、LENGTHB - lengthA、' 0 ' )。 21 } 22 他の 23 { 24 // A:1234567 25 // B:0782971 26 B.insert(0、lengthA - LENGTHB、' 0 ' )。 27 = lengthAのLENGTHB; // ピットがあることに注意してください 28 } 29 30 int型 COUNT = 1 ; //はビット表し 31がある ため(int型 - I = LENGTHB 。1 ; I> = 0 - ; I) 32 { 33は IF(COUNT%2 == 1 ) 34は 、{ 35 - RESの=(B [I] ' 0 ' - + A [I] ' 0 ')%13であり、 36 newString.push_back(NUM [RES])。 37 } 38 そう であれば(%カウント2 == 0 ) 39 { 40件 のRES =(B [1] - [I])。 41 であれば(RES < 0 ) 42 { 43の RES + = 10 。 44 } 45 newString.push_back(NUM [RES])。 46 } 47 数++ ; 48 } 49 のための(int型I = newString.size() - 1 ; I> = 0 ; - I) 50 { 51 COUT << NEWSTRING [I]。 52 } 53 リターン 0 。 54 }