PAT B1048 数字加密 (20 分)
2024-10-19 12:49:20
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
string s1, s2;
getline(cin, s1);
s2 = s1.substr(s1.find(" ") + , s1.length() - s1.find(" "));
s1.erase(s1.find(" "), s1.length() - s1.find(" "));
while (s2.length() < s1.length()){
s2.insert(, "");
}
//cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
int res;
for (int i = ; i < s2.length() && i < s1.length(); i++){
if (i % == ){
res = (s1[i] - '' + s2[i] - '')%;
if (res < )s2[i] = '' + res;
else if (res == )s2[i] = 'J';
else if (res == )s2[i] = 'Q';
else if (res == )s2[i] = 'K';
}
else{
res = s2[i] - '' - s1[i] + '';
if (res < )res += ;
s2[i] = '' + res;
}
//cout << s2[i] << endl;
}
reverse(s2.begin(),s2.end());
cout << s2;
system("pause");
}
注意点:这题逻辑很简单,就是有一个坑会导致测试点2和6过不去,就是B比A短,要补0直到一样长。
最新文章
- java中文乱码解决之道(六)-----javaWeb中的编码解码
- C++11笔记<;一>;
- XP局域网内专用消息队列
- IT行业常见职位职业路线图
- Xcode与OX 版本对照表
- Android中实现进入App之后检查网络状态
- Ubuntu14.04 切换root账户su root失败解决办法
- Linux---More命令 初级实现
- 实现一个脚本语言Raven(一)
- GPUImage滤镜效果翻译
- 类似aaa?a=1&;b=2&;c=3&;d=4,如何将问号以后的数据变为键值对
- MySQL 性能调优之SQL
- [转]微擎人人商城m()函数调用model方法
- Silverlight 预定义颜色速查表
- 单片机程序在内存和FLASH中的空间分配
- $(...).modal is not a function
- jdk1.8安装后查看Java -version出错
- GO1.6语言学习笔记2-安装配置及代码组织
- xcode10不兼容问题解决方法,framework编译脚本
- Halcon 笔记1