1048. 数字加密(20)

来源:互联网 发布:淘宝网店推广目标 编辑:程序博客网 时间:2024/05/22 13:24

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

输入格式:

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

输出格式:

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

输入样例:
1234567 368782971
输出样例:
3695Q8118

#include <iostream>#include <string> using namespace std;string Reverse(string A){    int len = A.length();    char tmp;    for ( int i = 0 ; i < len / 2 ; i++){        tmp = A[i];        A[i] = A[len-i-1];        A[len-i-1] = tmp;    }    return A;}string encode(string B ,string A , int len){    for ( int i = 1 ; i <= len ; i++){        int tmp;        if ( i % 2 == 1){            tmp = (A[i-1] - '0' )+ (B[i-1] - '0');            tmp %= 13;            if ( tmp <= 9){                B[i-1] = tmp + '0';             }else if ( tmp == 10){                        B[i-1] = 'J';                    }else if ( tmp == 11){                            B[i-1] = 'Q';                        }else if ( tmp == 12){                            B[i-1] = 'K';                        }        }else{            tmp = (B[i-1] - '0')- ( A[i-1] - '0');            if ( tmp < 0){                tmp += 10;            }            B[i-1] = tmp + '0';         }    }    return B;}int main(){    string A,B;    cin>>A>>B;    int len_A = A.length();    int len_B = B.length();    A = Reverse(A);    B = Reverse(B);    if ( len_A <= 100 && len_B <= 100){        if ( len_B >= len_A){            B = encode(B,A,len_A);        }else{            B = encode(B,A,len_B);        }       }     B = Reverse(B);    cout<<B;    return 0;}

(PS:程序有bug,但是没才、找出来。哪位让仁兄找出来,请留言)

这里写图片描述

1 0
原创粉丝点击