您的位置:首页 > 其它

1048. 数字加密

2018-02-03 12:54 141 查看
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。输入格式:输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。输出格式:在一行中输出加密后的结果。输入样例:
1234567 368782971
输出样例:
3695Q8118
=========================================================================================
思路:
使用字符串处理数字。由于A串可能小于B串,那么就在A串前补0.
#include <iostream>#include <iomanip>#include <cmath>#include <algorithm>#include <cstring>#include <sstream>#include <map>#include <set>#include <vector>#include <queue>using namespace std;int main(){string a,b;cin>>a>>b;int i,j,k,temp,lena,lenb;char ch;lena = a.size();lenb = b.size();while(lenb < lena){b = '0'+b;lenb++;}k = 1;for(i=lena-1,j=lenb-1;i>=0&&j>=0;i--,j--,k++){if(k%2 == 1){temp = ((b[j]-'0')+(a[i]-'0'))%13;if(temp == 10)ch = 'J';else if(temp == 11)ch = 'Q';else if(temp == 12)ch = 'K';elsech = (char)(temp+'0');}else{temp = (b[j]-'0')-(a[i]-'0');if(temp < 0)temp += 10;ch = (char)(temp+'0');}b[j] = ch;}cout<<b<<endl;return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: