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

思路

  • STEP1:定义四个数组

    • A[]:被加数A,a:数组下标,初始指向数组最高位;
    • B[]:被加数B,b:数组下标,初始指向数组最高位;
    • M[]:进制数组,m:数组下标,初始指向数组最高位;
    • s[]:存放结果,初始为0,t:数组下标,初始为0;
  • STEP2:循环计算

    • 设有:
    • 被加数1:n1;A[]中仍有数:取A[a] ;A[]中无数:取0;
    • 被加数2:n2;B[]中仍有数:取B[b] ;B[]中无数:取0;
    • 该位进制:d;M[]中无数,或为0 :取10 ;否则取M[m];
    • 由此得到公式:
    • 相加结果,进位后剩余的数:s[t] = ( s[t] + n1 + n2 ) % d ;
    • 相加结果,进位的数:s[t+1] = ( s[t] + n1 + n2 ) / d ;
  • STEP3:舍去多余的0并输出结果

#include <stdio.h>
int main(){
char m[20],a[20],b[20];
int arr[20]={0},s=0;//存放最终结果
scanf("%s %s %s",m,a,b);
int c=strlen(a)-1;//从各数组高位开始计算
int d=strlen(b)-1;//c为被加数 数组a[]的下标指针
int e=strlen(m)-1;//同理:b-B[],m-M[];
int n1,n2,h;
for(;c>=0||d>=0;s++,c--,d--,e--){//循环至两个被加数组中都没有未处理元素为止;
n1= (c>=0) ? a[c]-'0':0;//被加数1 若a[]中的数都已处理完,被加数1则为0;
n2= (d>=0) ? b[d]-'0':0;//被加数2 若b[]中的数都已处理完,被加数2则为0;
h= (e<0 || m[e]=='0') ? 10 : m[e]-'0';//进制 m[e]为0时,或m[]中数都已处理完,h为10进制;
arr[s+1] = (arr[s]+n1+n2)/h;//赋值
arr[s] = (arr[s]+n1+n2)%h;//赋值
}
while( !arr[s] && s>0) s--;//舍去多余的0
while( s> -1) printf("%d",arr[s--]); //输出
return 0;
}

参考博文

1074 宇宙无敌加法器 (20分)C语言的更多相关文章

  1. PAT Basic 1074 宇宙无敌加法器 (20 分)

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

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

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

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

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

  4. PAT(B) 1074 宇宙无敌加法器(Java)

    题目链接:1074 宇宙无敌加法器 (20 point(s)) 题目描述 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的, ...

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

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

  6. PAT 1074 宇宙无敌加法器(20)(代码+思路+测试点分析)

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

  7. PAT 1074 宇宙无敌加法器 (20 分)

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

  8. PAT 1074 宇宙无敌加法器

    https://pintia.cn/problem-sets/994805260223102976/problems/994805263297527808 地球人习惯使用十进制数,并且默认一个数字的每 ...

  9. P1074 宇宙无敌加法器

    P1074 宇宙无敌加法器 转跳点:

随机推荐

  1. selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)

    selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver   selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...

  2. oracle用Where子句替换HAVING子句

    避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销. 例如: 低效: ...

  3. 使用sqlyog链接多个主机的数据库

  4. colab找不到模块 no name

    https://www.jianshu.com/p/2cf00bb9db34?utm_source=oschina-app 穷学生学习神经网络一定体会过“等待”的痛苦... 循环一次epoch急死人, ...

  5. wpf 登录时显示状态动态图

    下面的示例演示了如何在登录过程时,界面上显示状态图标,登录完成后隐藏图标: public partial class MainWindow : Window { public MainWindow() ...

  6. data-属性的作用

    data-用于存储页面或应用程序的私有自定义数据,赋予我们在所有HTML元素上嵌入自定义data属性的能力,存储的数据能被页面的JS利用,以创建更好的用户体验. <div id="bo ...

  7. 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树

    题目链接:https://www.luogu.org/problem/P2146 本题涉及算法: 树链剖分: 线段树(区间更新及求和,涉及懒惰标记) 然后对于每次 install x ,需要将 x 到 ...

  8. CentOS7增加或修改SSH端口号

    https://blog.csdn.net/ausboyue/article/details/53691953 前言:开启某服务或软件的端口,要从该服务或软件监听的端口(多以修改配置文件为主),SeL ...

  9. [转]【转】大型高性能ASP.NET系统架构设计

    大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...

  10. [学习笔记]k短路

    A*:我已经忘了怎么写了,反正n=30,m=1000都能卡掉... 正解:可持久化左偏树+堆维护可能集合 原论文:http://www.docin.com/p-1387370338.html 概括: ...