高精度算法-保姆级讲解

目录

1.什么是高精度算法

2.高精度加法 

3.高精度减法

4.高精度乘法 

5.高精度除法 (高精度除以低精度)

6.高精度阶乘(n个低精度数相乘) 


1.什么是高精度算法

高精度算法(High Accuracy Algorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大无法在计算机中正常存储的数字,将这个数字拆开,拆成一位一位或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称为是高精度数。高精度算法就是能处理高精度数各种运算的算法,但又因其特殊性,故从普通数的算法中分离,自成一家。

 (***下面的讲解分布于注释和图片中***)

2.高精度加法 

#include<iostream>
#include<algorithm>
 
using namespace std;
const int N = 1e5 + 10;
 
string s1, s2;
int a[N], b[N], c[N];
 
int main()
{
	cin >> s1 >> s2;
	int j = 1, k = 1;//a、b数组的下标都是从1开始的
	for (int i = s1.size() - 1; i >= 0; i--) a[j++] = s1[i] - '0';//size()函数返回字符串中字符的数量
	//字符串的索引是从0开始,s1.size()计算出字符串s1最后一个字符的索引(倒序输入)
	//size()是std::string类的一个成员函数,用点运算符进行访问
	for (int i = s2.size() - 1; i >= 0; i--) b[k++] = s2[i] - '0';
 
	int ma = max(s1.size(), s2.size());//计算两个输入数字字符串的最大长度ma,确定后续计算的循环次数
	int ans = 0;//用于存储每一位相加时的进位
	for (int i = 1; i <= ma; i++)
	{
		ans = ans + (a[i] + b[i]);
		c[i] = ans % 10;
		ans = ans / 10;
	}
 
	if (ans) c[++ma] = ans;//**一定要注意最高位是否还有进位
	for (int i = ma; i >= 1; i--)//倒序输出
	{
		cout << c[i];
	}
	return 0;
}

3.高精度减法

#include<iostream>
#include<algorithm>
 
using namespace std;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值