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函数更加简洁
 // 1048.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream>
#include<stack>
#include<string>
#include<typeinfo> using namespace std; //函数声明
void show_result(stack<char>& s1, stack<char>& s2);
void Push(stack<char>& s, string str);
void put_zero(stack<char>& s1, stack<char>& s2, const string& str1, const string& str2); int main()
{
string str1, str2;
stack<char> s1, s2; cin >> str1 >> str2; //将长度小的字符串对应的栈先填入字符0,方便后续计算
put_zero(s1, s2, str1, str2); //将字符串入对应的栈
Push(s1, str1);
Push(s2, str2); //程序实现并打印
show_result(s1, s2); return ;
} //将长度小的字符串对应的栈先填入字符0
void put_zero(stack<char>& s1, stack<char>& s2, const string& str1, const string& str2)
{
int len = str1.length() - str2.length(); if (len>)
{
for (int i = ; i < len; ++i)
s2.push('');
}
else
{
for (int i = ; i < -len; ++i)
s1.push('');
}
} //将字符串入栈
void Push(stack<char>& s, string str)
{
int i; for (i = ; str[i] != '\0'; ++i)
s.push(str[i]); } //程序实现
void show_result(stack<char>& s1, stack<char>& s2)
{
int i,len=s1.size();
stack<char> s;
int a, b,temp;
char Arr[] = { '', '', '', '', '', '', '', '', '', '', 'J', 'Q', 'K' }; for (i = ; i < len; ++i)
{
a = static_cast<int>(s1.top() - );
b = static_cast<int>(s2.top() - ); if (i & )//偶数位
temp=(b-a) >= ? b-a : b-a+;
else//奇数位
temp = (a + b) % ; s.push(Arr[temp]);//将新得到的字符存入新的栈中 s1.pop(), s2.pop();//栈顶元素出栈
} while (!s.empty())//处理后的栈输出
{
cout << s.top(); s.pop();
} cout << endl;
}

最新文章

  1. 表单reset无法重置hidden的解决方案
  2. java 关于多线程高并发方面
  3. 【BZOJ-3786】星系探索 Splay + DFS序
  4. GDC2016 【全境封锁】的全局照明技术
  5. struts.enable.DynamicMethodInvocation = true 动态方法调用
  6. (转)asp.net分页存储过程
  7. 广播,多播,IGMP:网际组管理协议
  8. [Android] &quot;Failed to find Java version for &#39;C:\Windows\system32\java.exe&quot;
  9. 【转】DHCP协议详解
  10. MYSQL之库操作
  11. 关于非现场审计软件的一些介绍(ACL、IEDA、Teammate)
  12. 1. centos下安装docker
  13. 解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
  14. python面试题总结(1)
  15. code-Behind 技术
  16. 20秒教你如何写maven2的pom文件的依赖包
  17. properties文件读写工具类
  18. [skill] C语言数组名到底是个啥
  19. OSPF路由协议(二)
  20. andorid 多线程handler用法

热门文章

  1. 欧拉函数  已经优化到o(n)
  2. js的以及前端框架
  3. css与html 与js的基础语法
  4. 【NOI2014】【BZOJ3669】【UOJ#3】魔法森林
  5. day4 java消息中间件服务
  6. CLR(Common Language Runtime) 公共语言运行库
  7. python中in,not in,比较运算符,格式化输出,编码
  8. YUICompressor的安装及使用(一)
  9. 利用pandas将numpy数组导出生成excel
  10. php格式化数字:位数不足前面加0补足