首页 > 代码库 > 1048. 数字加密(20)
1048. 数字加密(20)
1048. 数字加密(20) 本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。 输入格式: 输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。 输出格式: 在一行中输出加密后的结果。 输入样例: 1234567 368782971 输出样例: 3695Q8118
#include <iostream> #include <stack> using namespace std; char num[]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘J‘,‘Q‘,‘K‘}; int main() { string a,b; cin>>a>>b; if(b.length()<a.length()) { int n=a.length()-b.length(); while(n--) { b="0"+b; } } int index_a=a.length()-1; int index_b=b.length()-1; int weishu=1; stack<char> res; for(;index_b>=0&&index_a>=0;index_b--,index_a--) { if(weishu%2==1) { int tmp=(int)(b[index_b]-‘0‘)+(int)(a[index_a]-‘0‘); tmp=tmp%13; res.push(num[tmp]); } else { int tmp=(int)(b[index_b]-‘0‘)-(int)(a[index_a]-‘0‘); if(tmp<0) { tmp+=10; } res.push(num[tmp]); } weishu++; } while(index_b>=0) { res.push(b[index_b]); index_b--; } while(res.size()>0) { cout<<res.top(); res.pop(); } cout<<endl; return 0; }
1048. 数字加密(20)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。