题目描述:

地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 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

AC代码:

#include <stdio.h>
#include <string.h>int main()
{int nBase, nA, nB, nS = 21, base, a, b;char sBase[21] = {0}, sA[21] = {0}, sB[21] = {0}, sSum[22] = {0};// 读取三组数字,以字符串形式存储 scanf("%s %s %s", sBase, sA, sB);nBase = strlen(sBase);nA = strlen(sA);nB = strlen(sB);for(int i = 0; i < nBase; i++){// 把数组 A B代表的数字转化为 整数 a, b // 此处用 nA,nB-i-1 控制每一组数的位置  [巧妙之处]a = nA <= i ? 0 : sA[nA - i - 1] - '0';b = nB <= i ? 0 : sB[nB - i - 1] - '0';// base代表该位置的进制 base = sBase[nBase - i - 1] == '0' ? 10 : sBase[nBase - i - 1] - '0';// 运算每位的值 sSum[nS - i - 1] += a + b;// 计算进位与否 sSum[nS - i - 2] += sSum[nS - i - 1] / base; sSum[nS - i - 1] = sSum[nS - i - 1] % base;}// 变为字符类型 // 注 如果不经过 sSum[i] += '0' 变换,则字符存储是第一位' ',ASCII 编码为0 for(int i = 0; i < 21; i++)sSum[i] += '0';// 保证第一位不为零 for(int first = 0; first < 21; first++)// 从前向后遍历,找到第一个不是0字符的数字 if(sSum[first] != '0'){// 输出第 first 位后的数字 puts(sSum + first);return 0;}// 若结果为0,则直接输出0 printf("0");return 0;
}

ASCII码附录:(from百度百科)

转载于:https://www.cnblogs.com/Robin5/p/11190705.html

PAT_B_1074 宇宙无敌加法器相关推荐

  1. C++学习之路 | PTA乙级—— 1074 宇宙无敌加法器 (20 分)(精简)

    1074 宇宙无敌加法器 (20 分) 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PA ...

  2. pat 1074. 宇宙无敌加法器(20)

    1074. 宇宙无敌加法器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 地球人习惯使用十进制数,并且默 ...

  3. 古风排版+大笨钟+宇宙无敌加法器+情人节

    L1-1 古风排版 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数.第二行给出一个长度不 ...

  4. 宇宙无敌加法器 python

    L1-3 宇宙无敌加法器 (20 分) 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PA ...

  5. PAT乙 1074. 宇宙无敌加法器

    题目链接:PAT.1074宇宙无敌加速器 求解过程: 这里可以用4个数组来存储数据,一个保存N,一个保存添0后与N等长的输入1,一个保存添0后与N等长的输入2,另外一个保存结果.这里之所以要添0是为了 ...

  6. 【PAT乙级】1074 宇宙无敌加法器 (20 分)

    题目地址 #include<cstdio> #include<iostream> #include<string> #include<vector> u ...

  7. 【简便解法】1074 宇宙无敌加法器 (20分)_40行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都 ...

  8. PAT——1074. 宇宙无敌加法器(20)

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PAT数".每个PAT星人都必须熟记各 ...

  9. PAT 1074. 宇宙无敌加法器(20)-PAT乙级真题

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PAT数".每个PAT星人都必须熟记各 ...

最新文章

  1. Java 利用接口实现回调
  2. 比特币可视化工具_比特币再破1.2万大关 你还要做打工人吗?
  3. 如何改变 Python 中线程的执行顺序
  4. .net core 整洁架构入门
  5. CRTMPServer 在CentOS 64-bit下的编译(转)
  6. MyCat分布式数据库集群架构工作笔记0017---高可用_单表存储千万级_海量存储_垂直分库
  7. NTFS文件加密初探
  8. 今天我们谈一下HTML标签中的map标签的用法和使用场景
  9. 神奇的python系列11:函数之生成器,列表推导式
  10. 小米发布会之文案错误:大哥你先处罚自己!再处罚相关高管!
  11. DW-办公自动化02(Excel)
  12. 【C++】虚表与虚表指针,虚基类表与虚基类表指针
  13. 关于BigDecimal常量的使用ROUND_UP,ROUND_DOWN,ROUND_HALF_UP,ROUND_HALF_DOWN
  14. 【原创】Windows图标助手v2.0
  15. 七、vertical-align属性、透明度属性及兼容、ps常用工具、常见的图片格式、项目规范、命名参考、iconfont的使用...
  16. 2019年Q3股票行情:依旧大喜大悲
  17. 苹果收取30%过路费_你是顶是踩?
  18. 程序员都要学学任正非的坚强!这个老头,在逆境中崛起!
  19. 2013年H1B携H4签证
  20. spss和matlab软件,MATLAB与SPSS进行多元回归分析的区别.pdf

热门文章

  1. SDRAM芯片初始化、行有效、列读写时序(高手进阶,终极内存技术指南——完整/进阶版) ——本文为转载...
  2. GODADDY主机用tar命令通过SSH远程打包20M以上的文件
  3. C语言 复制文件内容粘贴到另一个文件中
  4. php 屏蔽mysql错误提示_PHP.ini中配置屏蔽错误信息显示和保存错误日志
  5. MSC EASY5 2020中文版
  6. Day04:函数参数、对象、嵌套、闭包函数和装饰器
  7. IOS开发学习记录第5天之C语言学习
  8. SQL Server 2005中更改sa的用户名和密码
  9. Mycat1.6之注解多租户
  10. 用电线来传网络信号的黑科技?AirGig究竟是什么