首页 > 代码库 > PAT 乙级 1048 数字加密(20) C++版
PAT 乙级 1048 数字加密(20) C++版
1048. 数字加密(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:1234567 368782971输出样例:
3695Q8118
思路:此题思路比较清晰,先将短的字符串头部添加字符0,知道两个字符串相等长度为止,只是为了后续操作更加简便,再将两个字符串分别以字符的形式读入对应的字符栈,此时两个栈的长size一定相同
,用栈的一个好处就是因为个位是最后一位,栈先进先出,正好满足,然后将处理后的结果存入一个新的栈,该栈也是为了从高位开始输出,代码如下,代码行数可以更少,但是我写的方式是为了让main函数更加简洁
1 // 1048.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<stack> 7 #include<string> 8 #include<typeinfo> 9 10 using namespace std; 11 12 //函数声明 13 void show_result(stack<char>& s1, stack<char>& s2); 14 void Push(stack<char>& s, string str); 15 void put_zero(stack<char>& s1, stack<char>& s2, const string& str1, const string& str2); 16 17 int main() 18 { 19 string str1, str2; 20 stack<char> s1, s2; 21 22 cin >> str1 >> str2; 23 24 //将长度小的字符串对应的栈先填入字符0,方便后续计算 25 put_zero(s1, s2, str1, str2); 26 27 //将字符串入对应的栈 28 Push(s1, str1); 29 Push(s2, str2); 30 31 //程序实现并打印 32 show_result(s1, s2); 33 34 return 0; 35 } 36 37 //将长度小的字符串对应的栈先填入字符0 38 void put_zero(stack<char>& s1, stack<char>& s2, const string& str1, const string& str2) 39 { 40 int len = str1.length() - str2.length(); 41 42 if (len>0) 43 { 44 for (int i = 0; i < len; ++i) 45 s2.push(‘0‘); 46 } 47 else 48 { 49 for (int i = 0; i < -len; ++i) 50 s1.push(‘0‘); 51 } 52 } 53 54 //将字符串入栈 55 void Push(stack<char>& s, string str) 56 { 57 int i; 58 59 for (i = 0; str[i] != ‘\0‘; ++i) 60 s.push(str[i]); 61 62 } 63 64 //程序实现 65 void show_result(stack<char>& s1, stack<char>& s2) 66 { 67 int i,len=s1.size(); 68 stack<char> s; 69 int a, b,temp; 70 char Arr[13] = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘J‘, ‘Q‘, ‘K‘ }; 71 72 for (i = 0; i < len; ++i) 73 { 74 a = static_cast<int>(s1.top() - 48); 75 b = static_cast<int>(s2.top() - 48); 76 77 if (i & 1)//偶数位 78 temp=(b-a) >= 0 ? b-a : b-a+10; 79 else//奇数位 80 temp = (a + b) % 13; 81 82 s.push(Arr[temp]);//将新得到的字符存入新的栈中 83 84 s1.pop(), s2.pop();//栈顶元素出栈 85 } 86 87 while (!s.empty())//处理后的栈输出 88 { 89 cout << s.top(); 90 91 s.pop(); 92 } 93 94 cout << endl; 95 }
PAT 乙级 1048 数字加密(20) C++版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。