标签:依次 amp 运算 names out include top end ios
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; }
标签:依次 amp 运算 names out include top end ios
原文地址:http://www.cnblogs.com/xiongmao-cpp/p/6377665.html