PAT 1048デジタル暗号化(20)
点数をつける...この問題では、デジタル暗号化方法を実現する必要があります.まず暗号化用の正の整数Aを固定し、いずれかの正の整数Bに対して、その1桁の数字とAの対応する位置の数字を以下の演算を行う:奇数桁に対して、対応する桁の数字を加算した後に13に対して残りを取る--ここではJで10、Qで11、Kで12を表す;対偶数ビットは、Bの数字からAの数字を減算し、結果が負数であれば10を加算します.ここでは順位を1位にします.
入力形式:
1行にAとBの順に入力し、いずれも100ビットを超えない正の整数で、その間をスペースで区切ります.
出力フォーマット:
暗号化された結果を1行に出力します.入力サンプル:1234567 368782971
出力サンプル:3695 Q 8118
テストコード:
入力形式:
1行にAとBの順に入力し、いずれも100ビットを超えない正の整数で、その間をスペースで区切ります.
出力フォーマット:
暗号化された結果を1行に出力します.入力サンプル:1234567 368782971
出力サンプル:3695 Q 8118
テストコード:
void PAT1048(){
string A, B;
string C;
A = "1234567"; B = "368782971";
int lenA = A.length(); int lenB = B.length();
int k =1,m=lenA-1;
int a = 0, b = 0,tmp=0;
for (int i = lenB-1; i >= 0; --i){
if (m>= 0){
b = B[i] - '0'; a = A[m--] - '0';
if (k % 2 == 0){
tmp = b - a;
if (tmp >=0)C.push_back(tmp+'0');
else C.push_back((tmp+10)+'0');
++k;
}
else{
tmp = b + a;
tmp = tmp % 13;
if (tmp>= 10){
if (tmp == 10)C.push_back('J');
else if (tmp == 11)C.push_back('Q');
else C.push_back('K');
}
else C.push_back(tmp+'0');
++k;
}
}
else break;
}
if (lenB > lenA){
for (int i = lenB - lenA - 1; i >= 0; --i)C.push_back(B[i]);
}
else if (lenB < lenA){
for (int i = lenA - lenB - 1; i >= 0; --i)C.push_back(A[i]);
}
int lenV = C.length();
for (int i = lenV - 1; i >= 0; --i){
cout << C[i];
}
}