day 02 高精度计算

178 阅读2分钟
  1. 高精度计算

    1. 高精度计算一般指有大数参与的计算,但是这个问题一般只出现在c++中,因为C++中的int和long long均有位数限制,但是java和python均有大数字格式,所以没有该问题。
    2. 一般处理办法:将大整数每一位存到数组中,且一般从个位开始排(如123,在数组中应存为3 2 1,这样便于进位和退位计算),随后按照正常数学计算编程(注意进位退位等问题)。
    3. 下面是高精度加法、减法、高精度乘以低精度乘法以及高精度除以低精度除法思路及实现(注:此时假设A,B均为正数,乘法和除法时b为小数值)
  • 高精度加法: 高精度加法的实现基于两个大整数相同位数的逐位相加,并考虑进位的情况。从个位开始,将对应位的数字相加,并将结果存储到一个新的数组中。如果相加的结果超过了10,就需要进位到下一位的运算。最后,需要注意处理可能出现的最高位的进位。
    
  • 高精度减法: 高精度减法的实现通过从高位到低位,逐位进行减法运算,并考虑借位的情况。如果被减数小于减数,则需要借位。在借位的情况下,从高位借位,并将结果存储到一个新的数组中。最后,需要注意处理可能出现的多余的零。
    
  • 高精度乘法: 高精度乘法是将一个大整数与一个小整数进行逐位相乘的运算。从个位开始,将大整数的每一位与小整数相乘,并考虑进位的情况。将相乘的结果逐位存储到一个新的数组中,并按照正常的数学计算规则进行进位。最后,需要注意处理可能出现的多余的零。
    
  • 高精度除法: 高精度除法是将一个大整数除以一个小整数的运算。从最高位开始,逐位进行除法运算,并得到商和余数。将每一位的商逐位存储到一个新的数组中,并将余数传递到下一位的运算。最后,需要注意处理可能出现的多余的零。
    

此处为加法和减法的数据输入、输出。

code.png

此处为具体实现

code.png 此处为高精度乘以低精度,高精度除以低精度的输入、输出。

code.png

此处为具体实现

code.png

此处仍有一个问题,在CLion中当A值过大时,乘法仍会输出乱码,但是在vscode以及acwing中输出均正常,猜测是内存或者运行环境的问题,暂未查明。

这个问题应用范围比较窄,