Java教程

蓝桥杯基础练习:高精度加法解析

本文主要是介绍蓝桥杯基础练习:高精度加法解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

高精度加法的核心因为整数比较大,计算机能表示的整数范围有限,所以需要使用数组表示一个整数。方法是:定义一个数组a,使用a[0]来表示整数的个位,a[1]来表示十位,依次类推。在加法过程中要注意进位,逢十进一。 

实现代码如下


# 2022.1.5
# 蓝桥杯基础练习
# 试题名称:高精度加法
# 问题描述:输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

ist1 = list(input())  
ist2 = list(input())
ist1 = list(map(int, ist1))             # 将字符类型的元素转化为整数类型
ist2 = list(map(int, ist2))
ist1 = ist1[::-1]                       # 列表逆置
ist2 = ist2[::-1]
if(len(ist1) > len(ist2)):
    ist2 = ist2 + [0]*(len(ist1) - len(ist2)) # 两个整数位数不同,少的用0补充
else:
    ist1 = ist1 + [0]*(len(ist2) - len(ist1)) # 两个整数位数不同,少的用0补充
n = [len(ist1), len(ist2)]
sum = [0] * max(n) + [0]              # 两个n位整数的和可能是n+1位的整数
for i in range(max(n)):
    sum[i] = ist1[i] + ist2[i]        # 个位和个位相加,十位和十位相加...
for i in range(max(n)+1):             # 在这个循环中,进行进位
    if(sum[i] >= 10):  
        sum[i+1] = sum[i+1] + 1  # 逢十进一
        sum[i] = sum[i] - 10
sum = sum[::-1]                     # 列表再逆置,变成正常顺序
if(sum[0] == 0):                    # 因为sum有n+1位,所以第一个元素有可能为0
    sum.pop(0)                      # 如果为0,则删除
for i in sum:
    print(i,end="")                 # 打印输出结果

需要注意的点

  1. 两个位数不同的整数相加时,位数少的整数需要补0
  2. 两个位数为n的整数相加时,它们的和有可能为n+1位,所以sum列表长度需要是n+1

这篇关于蓝桥杯基础练习:高精度加法解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!