PTA:B1048 数字加密。c++
2020-03-10 01:12
148 查看
B1048 数字加密
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
sample input:
1234567 368782971
sample output:
3695Q8118
思路:
- 为了方便按位处理,对于两个整数A\B,采用字符串的方式读入
- 由于读入的时候最高位在数组的0号位,且题目要求从最低位开始处理且最低位为第一位,所以需要在读入后再把数组重新按照低位在数组低位的方式进行反转,并且从第一位开始
- 最终需要处理和输出的字符长度是两个数字中位数最长的那一个
- 需要注意的是,由于从1号位开始,所以判断一个数是否处理完毕的条件是>count。
- 最后输出的时候也要进行反转输出,先输出数字的高位。
#include <iostream> #include<cstring> #include<cstdio> using namespace std; int main() { char a[111],b[111]; cin>>a>>b; int lentha=strlen(a); int lenthb=strlen(b); char ans[111]; char aa[111],bb[111]; int counta=0,countb=0; for(int i=lentha;i>=0;i--)//反转a,从1号位置开始 { aa[counta]=a[i]; counta++; } for(int i=lenthb;i>=0;i--) { bb[countb]=b[i]; countb++; } counta--; countb--; int len=max(counta,countb);//两个中大的那个是长度 for(int i=1;i<=len;i++)//从个位开始 { int numa=0,numb=0; if(i<=counta) numa=aa[i]-'0'; else numa=0; if(i<=countb) numb=bb[i]-'0'; else numb=0; if(i%2==1)//奇数位 { int temp=(numa+numb)%13; if(temp==10)ans[i]='J'; else if(temp==11)ans[i]='Q'; else if(temp==12)ans[i]='K'; else ans[i]=temp+'0'; } if(i%2==0)//偶数 { int temp=numb-numa; if(temp<0) temp+=10; ans[i]=temp+'0'; } } //从高位输出 for(int i=len;i>0;i--) cout<<ans[i]; return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PTA1048数字加密
- PTA 1048 数字加密 (c语言)
- PTA乙级 1048 数字加密 (20 分)
- 【PAT】1048. 数字加密(20)
- 乙级 PAT 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)/YHF/2016.11.22
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- PAT-1048 数字加密20
- PAT-B 1048. 数字加密
- PAT 1048. 数字加密
- 1048. 数字加密(20)
- PAT乙级1048 数字加密
- 1048. 数字加密(20)-浙大PAT乙级真题java实现
- 1048. 数字加密
- PAT乙级—1048. 数字加密(20)-native
- 1048.数字加密(字符串处理)
- PAT (Basic Level) Practice 1048 数字加密
- PTA level_01 数字加密