高精度算法(加,减,乘,高精除低精)
南昌理工ACM集训队!!! 😝
在一些题目中数据可能会算到小数点后几百位或更多,也可能是几千亿几百亿的大数字,这时候就需要用到高精度算法来辅助计算了。
首先,什么是高精度计算呢?
高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中,用一个数组去表示一个数字,这样这个数字就被称为是高精度数。高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。
-------百度百科
*算法思想:
因为此时运算因子已经超过了整型的储存范围,所以在这里我们采用数组储存高精度数( 当然为了优化计算速度,也可以在一个数组元素中储存多位数 ),考虑到进位计算,将数由低位到高位依次存在数组下标对应由低到高位置上。然后将字符串转换为整数储存在数组中。
一、高精度加法
运算顺序:
从低位向高位计算,并判断是否进位,直到数据末端为止。
代码如下(模板题洛谷p1601):
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char str1[100],str2[100];
int a[100],b[100],len,i;
int main()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%s",&str1);
scanf("%s",&str2);
a[0]=strlen(str1);
for( i=1; i<=a[0]; i++ )
a[i]=str1[a[0]-i]-'0';//翻转储存,方便后续从低位向高位进位计算;
b[0]=strlen(str2);