PAT 乙级 1074 宇宙无敌加法器 (20 分)
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。
在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。
输入格式:
输入首先在第一行给出一个 N 位的进制表(0 < N ≤ 20),以回车结束。 随后两行,每行给出一个不超过 N 位的非负的 PAT 数。
输出格式:
在一行中输出两个 PAT 数之和。
输入样例:
30527
06203
415
输出样例:
7201
- 注意三点:
1.不能再用传统的-号去解决进位问题,因为8+8相对于2进制进位太多,所以改用/号
2.注意结果为0的情况(最后一个case)
3.注意首多位为0的情况(如测试样例)
- #include<iostream>
- #include<string>
- #include<stack>
- using namespace std;
- char getResult(char ch1, char ch2, char ch3, int &flag)
- {
- char result;
- int temp = ;
- if (ch1 == '')
- temp = ;
- if (ch2 + ch3 + flag >= ch1 + temp + )
- {
- result = ch2 + ch3 + flag - ch1 - temp;
- flag = (ch2+ch3+flag-)/(ch1+temp-);
- }
- else
- {
- result = ch2 + ch3 + flag - ;
- flag = ;
- }
- return result;
- }
- int main()
- {
- string str1, str2, str3;
- stack<char> s;
- int flag = ;
- getline(cin, str1);
- getline(cin, str2);
- getline(cin, str3);
- int str1Len = str1.size() - ;
- int str2Len = str2.size() - ;
- int str3Len = str3.size() - ;
- for (; str2Len >= || str3Len >= ; --str1Len, --str2Len, --str3Len)
- {
- if (str2Len < )
- s.push(getResult(str1[str1Len], '', str3[str3Len], flag));
- else if (str3Len < )
- s.push(getResult(str1[str1Len], str2[str2Len], '', flag));
- else
- s.push(getResult(str1[str1Len], str2[str2Len], str3[str3Len], flag));
- }
- if (flag != )//如果flag不为0,则代表有新的进位
- s.push(flag + );
- while (!s.empty() && s.top() == '')//去除首位的0
- s.pop();
- if(s.empty())//如果全为0则为0
- cout<<<<endl;
- while (!s.empty())
- {
- cout << s.top();
- s.pop();
- }
- return ;
- }
PAT 乙级 1074 宇宙无敌加法器 (20 分)的更多相关文章
- PAT Basic 1074 宇宙无敌加法器 (20 分)
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”.每个 PAT 星人都必须熟记各位数字的进制 ...
- 1074 宇宙无敌加法器 (20分)C语言
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PAT数".每个 PAT 星人都必 ...
- pat 1074. 宇宙无敌加法器(20)
1074. 宇宙无敌加法器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 地球人习惯使用十进制数,并且默 ...
- PAT(B) 1074 宇宙无敌加法器(Java)
题目链接:1074 宇宙无敌加法器 (20 point(s)) 题目描述 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的, ...
- PAT——1074. 宇宙无敌加法器(20)
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”.每个PAT星人都必须熟记各位数字的进制表,例如 ...
- PAT 1074 宇宙无敌加法器(20)(代码+思路+测试点分析)
1074 宇宙无敌加法器(20 分)提问 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"P ...
- PAT乙级:1072开学寄语(20分)
PAT乙级:1072开学寄语(20分) 题干 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面 ...
- PAT乙级:1057 数零壹 (20分)
PAT乙级:1057 数零壹 (20分) 题干 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一 ...
- PAT乙级:1082 射击比赛 (20分)
PAT乙级:1082 射击比赛 (20分) 题干 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找 ...
随机推荐
- Sublime Text 3利用Snippet创建Getter和Setter
1. Tools -> Developer -> New Snippet. 2. 复制以下内容并保存: <snippet> <content><![CDATA ...
- TCP长连接与短连接、心跳机制
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- 帝国cms中下拉框select的绑定
在修改数据模型中,将下拉框的表示代码换成下: 将id换成自己的id地址.数据库查询中的classid换成自己创建栏目的id. <select name="diqu" id=& ...
- java DOM
使用DOM解析XML文档的步骤 1.创建解析器工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 2 ...
- 集群web-ui
一旦Hadoop集群启动并运行,可以通过web-ui进行集群查看,如下所述: 1.hdfs的集群端口号默认50070 NameNode http://localhost1:50070(默认端口号po ...
- redis概述(一)
什么是NoSql? 为了解决高并发.高可用.高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql. NoSql,叫非关系型数据库,它的全名Not only sql.它不能替代关系型数 ...
- ionic3/4 使用NavController 返回两层的方式
ionic3/4 使用NavController 返回两层的方式: this.navCtrl.popTo(this.navCtrl.length() - 3);
- Facade 外观(结构型)
Facade 外观(结构型) 一:描述: Facade 外观模式是为子系统至客户端之间提供简单的一致的接口,来降低耦合度. 二:模式图 三:实现代码简单例子: 1.业务模块: 2.外观接口: 3.客户 ...
- CCF 消息传递接口 (队列) 201903-4 (100分)
[题目描述] 老师给了 T 份 MPI 的样例代码,每份代码都实现了 n 个进程通信.这些进程标号 从 0 到 n − 1,每个进程会顺序执行自己的收发指令,如:“S x”,“R x”.“S x”表示 ...
- C++中的基础特性:封装,继承,多态
抽象: 要将现实中的一个具体事务,变成C++中的一个类,例如将现实中的汽车变成代码中的car类.完成这个过程就需要 抽象 这一基本手段. 抽象是指 对具体问题(对象)进行分析概括,找出该类对象的公共性 ...