地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 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. 亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型

    背景 互联网快速发展的今天,社交类应用.消息类功能大行其道,占据了大量网络流量.大至钉钉.微信.微博.知乎,小至各类App的推送通知,消息类功能几乎成为所有应用的标配.根据场景特点,我们可以将消息类场 ...

  2. 【BZOJ1227】[SDOI2009]虔诚的墓主人

    E. 虔诚的墓主人 题目描述 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前 ...

  3. 中国剩余定理(SCAUOJ 1077)

    1077 韩信点兵 时间限制:500MS  内存限制:65536K提交次数:1103 通过次数:99 题型: 编程题   语言: 无限制 Description 相传汉高祖刘邦问大将军韩信统御兵士多少 ...

  4. name和code的相关设置

    cdm中同时显示name和code tools->或右键Displace preferences->Entity->Advanced->Attributes->右侧Lis ...

  5. 冒泡排序&直接插入排序&快速排序

    一.冒泡排序 0       1      2      3      4      5 假设有一个6个数的数组,0,1,2,3,4,5是索引,冒泡排序就是相邻两个对比,比如5和4比,如果满足条件就互 ...

  6. 我去!JS的原型是咋回事?

    我去!JS的原型是咋回事? 最近写公司的项目,写着写着发现自己的原型的理解还是不够透彻,又去网上查了一番资料,顺便总结一下,在顺便给到的朋友能提供一点帮助.如有遗漏,欢迎交流. 原型是啥?为什么要用原 ...

  7. Python--day72--json内容回顾

    前后端分离,Json格式字符串:序列化和反序列化 """ 复习python中的json模块 """ import json s = '{&q ...

  8. H3C HDLC状态检测

  9. Vue 双向数据绑定v-model

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. H5 多媒体标签

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...