Python实现高精度(一)加法计算
2021/11/17 12:40:20
本文主要是介绍Python实现高精度(一)加法计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Python实现高精度(一)加法计算
- 1、首先是我们要接收一共要判断多少数组
- 2、处理一组数
- 2.1 首先是存储输入的数字
- 2.2 进行计算
- 2.3 输出
- 3.处理全部的数组
- 4 完整代码
题目来源:Central Europe 2000
题号:ZOJ1205
题目描述:十进制大数的加法运算
输入描述
输出描述
分析:
1、首先是我们要接收一共要判断多少数组
这里就是我们传统定义的第一种输入方式,就直接输入
n=int(input()) # 表示有n组输入数据
2、处理一组数
2.1 首先是存储输入的数字
在题目中提到,整数的长度不会大于100,所以我们在这里可以用 int或者str 存储每一位数,因为数字的长度不固定,所以我们应该建立一个列表长度为100的,保证能够存储,并且为了后面的计算方便,我们应该逆序存储,如果正序存储,不方便计算,而且很容易计算错位。所以第一位就应该是表示的个位数(我这里用int类型存储我们的值)
代码如下
x = [] maxlen = -1 for n in range(100): Num = input() if (Num == "0"): break x.append([0 for i in range(100)]) # 增加一个存储位置 lens = len(Num) # 获取最长的字符串的长度 if lens > maxlen: maxlen = lens # 逆序存储数字 for S in range(lens): x[n][S] = int(Num[lens - 1 - S])
2.2 进行计算
计算所有的数字,注意,为了保障能够计算不缺失,需要在最长数字的长度上,多计算两个位置
1、命名进位数,然后将sum的值计算每一位的值,其中一定要加上进位数
2、然后进位数为 sum除以10的值,余数为当前位的值
代码如下:
carry = 0 # 表示进位的值 for i in range(maxlen + 2): sum = carry for j in range(n): sum += x[j][i] digit = sum % 10 carry = sum // 10 result[i] = digit
2.3 输出
输出长度,需要注意的是,在这里我们应该去确定,我们的结果中,逆序第一个不为0的值开始, 所以需要从result的maxlen+2,中去判断,是否为0,找到第一个不为0的,然后记住这个位置, 然后从这个位置开始输出
代码如下:
i = maxlen + 2 while (i >= 0): if result[i] != 0: break i -= 1 while (i >= 0): print(result[i], end='') i -= 1 print()
3.处理全部的数组
因为题目中提到了,我们在两个数组之间的输出需要用空行隔开,所以我们在用判断,是否需要输入。
4 完整代码
class solution: def Integer_solver(self): x = [] sum = 0 maxlen = -1 result = [0 for i in range(110)] # 1、接收输入值: for n in range(100): Num = input() if (Num == "0"): break x.append([0 for i in range(110)]) # 增加一个存储位置 lens = len(Num) # 获取最长的字符串的长度 if lens > maxlen: maxlen = lens # 逆序存储数字 for S in range(lens): x[n][S] = int(Num[lens - 1 - S]) carry = 0 # 表示进位的值 for i in range(maxlen + 2): sum = carry for j in range(n): sum += x[j][i] digit = sum % 10 carry = sum // 10 result[i] = digit i = maxlen + 2 while (i >= 0): if result[i] != 0: break i -= 1 while (i >= 0): print(result[i], end='') i -= 1 print() def Integer(self): """ 输入文件的第1行为一个整数N,表示输入文件中接下来有N组数据。 每组数据最多包含100行。每一行由一个非常长的十进制整数组成, 这个整数的长度不会超过100个字符而且只包含数字,每组数据的最后一行为0, 表示这组数据结束。每组数据之间有一个空行。 :return: """ n=int(input()) # 表示有n组输入数据 for i in range(n): self.Integer_solver() if(i<n): print("\n") if __name__=="__main__": A=solution() A.Integer()
分享就到这结束了,如果有什么问题,可以私信我,我们一起学习,我会尽量开始做好算法这一个专栏,在我学习的同时与大家分享我的学习心得。
这篇关于Python实现高精度(一)加法计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程