首页 > 其他 > 详细

1048 数字加密

时间:2020-03-12 12:43:01      阅读:50      评论:0      收藏:0      [点我收藏+]

本题要求实现一种数字加密方法。首先固定一个加密用正整数 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;
}

1048 数字加密

原文:https://www.cnblogs.com/kalicener/p/12467906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!