1048 数字加密

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:
在一行中输出加密后的结果。

输入样例:
1234567 368782971



输出样例:
3695Q8118

我只能说这波和出题人配合的不好,2,5测试点不过,改代码后,测试点2过了5还没过,凎!

#include <iostream>
#include<string>
using namespace std;
int main() {
    string a, b,c;
    cin >> a >> b;
    int k = 1,x,i,j;
    for ( i = b.size() - 1, j = a.size() - 1; i >= 0&&j>=0; i--, j--,k++) {//运算到某一字符串没有字符为止。
        if (k % 2 == 1) {//奇数项
            x = (b[i] + a[j] - 2 * '0') % 13;
            if (x == 10) 
                c.insert(c.begin(),'J');
            else  if (x == 11)
                c.insert(c.begin(), 'Q');
            else  if (x == 12)
                c.insert(c.begin(), 'K');
            else
                c.insert(c.begin(), x + '0');
           
        }
        else {//偶数项
            x = b[i] - a[j];
            if (x < 0)
                c.insert(c.begin(), x + 10 + '0');
            else
                c.insert(c.begin(), x + '0');
        }
   
    }
    while (i >= 0) {//b够a不够
        c.insert(c.begin(), b[i]);
        i--;
    }
    while(j>=0)
    {   if(k%2==1//奇数项
            c.insert(c.begin(),a[j]);
        else{//偶数项
            char ch=10-(a[j]-'0')+'0';
            c.insert(c.begin(),ch);//测试点5过不了
        }
        j--;
        k++;
    }
    cout << c<<endl;
}

重写的代码,测试点2,5不过的原因是当b小于a时,b要补0计算。两种方法,一种是头插法,一种是尾插法。

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
    string a, b,c;
    int k = 1,x;
    cin >> a >> b;
    if (a.size() > b.size()) 
        for (int i = b.size(); i < a.size(); i++)
            b.insert(b.begin(), '0');
    
    else
        for (int i = a.size(); i < b.size(); i++)
            a.insert(a.begin(), '0');
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    for (int i = 0; i < a.size(); i++,k++) {
        if (k % 2 == 1) {//奇数项
            x = (b[i] + a[i] - 2 * '0') % 13;
            if (x == 10)
                c.insert(c.end(), 'J');
            else  if (x == 11)
                c.insert(c.end(), 'Q');
            else  if (x == 12)
                c.insert(c.end(), 'K');
            else
                c.insert(c.end(), x + '0');

        }
        else {//偶数项
            x = b[i] - a[i];
            if (x < 0)
                c.insert(c.end(), x + 10 + '0');
            else
                c.insert(c.end(), x + '0');
        }
    }
    reverse(c.begin(), c.end());
    cout << c << endl;
}
原文地址:https://www.cnblogs.com/kalicener/p/12467906.html