高精度基础2:a+b?哈哈哈哈 201809

看到 a+b 问题,大家都笑了。

今天我们讨论的,是超长的 a + 超长的 b;好吗!!!

题目:

a=999999999999999999999999999999999999999999999999999999999999999999 

b=8888888888888888888888888888888888888888985666666

请您写一个程序,算出a+b的和;哈哈哈哈

不会了吧,不会不要紧,后面有详细的解答哦

===========================================================================================

解题思路:

1、读入与存储:数据的位数太多,longlong 也装不下,只能用字符串来进行存储;

2、类型转换:字符串本身没有运算功能,为了方便运算,需要将字符串转换为整数数组

3、数位对齐:将各位数字逆序存放,以第一位为个位,可以进行数位对齐;

4、模拟竖式计算:直接按照列竖式计算的过程,进行模拟运算:各位求和、进位;

5、反向逐位输出:因为数位对齐,从个位开始,所以要反向输出

===========================================================================================

解题过程:

本次过程只讲原理,不要执着数位长度这些细节

1、读入+存储+逆序对齐

1.1 用  s [   ]  数组来存储第一个字符串

1.2 将 s [   ]  数组的 字符串,逆序放入 a [   ] 数组中,以第一位作为个位,翻转对齐,方便运算;

1.3 重复利用 s [   ]  数组来存储第二个字符串

1.4 将 s [   ]  数组的 字符串,逆序放入 b [   ] 数组中,以第一位作为个位,翻转对齐,方便运算;

1.5 到这个时候,我们得到了 a [   ]b [   ] 两个数组,分别存储了两个将要计算的整数(其实是两个序列)

1.6 分别用变量 nanb 来记录每个序列的长度(这个数有多少位),na=9nb=8

2、模拟竖式计算:

2.1 因为全部数字是翻转的,所以个位在左边,最高位在右边:

2.2 对 a [   ]b [   ] 的各数位分别求和,存储到 c [   ] 数组中:

2.3 对 c [   ] 数组:从左向右,依次进位,最高位溢出的话,继续进位,

2.4 得到新的 c [   ] 数组,数组长度nc=10

3、反向逐位输出:

3.1 因为数位对齐,从个位开始,所以要反向输出。

===========================================================================================

思路看懂了吗?别着急,还有很多细节处理要学习,下面是代码和解释

题目链接

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/82860697