高精度算法笔记

发布时间:2024年01月17日

目录

加法

减法

乘法

除法


高精度加法的步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.从低位到高位,逐位求和,进位,存余

4.把数组C从高位到低位依次输出

????????1.2为准备

	vector<int> A, B, C;
	string st1,st2;
	cin >> st1 >> st2;
	int len1 = st1.size(), len2 = st2.size();
	for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');
	for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

? ? ? ? 3为加法具体实现(0按位取反为-1,即-1时结束等价于>=0)

void add(vector<int> A, vector<int> B, vector<int>& C) {
	int t = 0, la = A.size(), lb = B.size();
	for (int i = 0; i < la || i < lb; i++) {
		if (i < la) t += A[i];
		if (i < lb) t += B[i];
		C.push_back(t % 10); //存余
		t /= 10; //进位
	}
	if (t) C.push_back(t); //最高位
}

? ? ? ? 4为结果输出,翻转输入所以一定也要翻转输出!!!

	for (int i = C.size() - 1; ~i; i--) cout << C[i];

测试


高精度减法的步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.若A<B,则交换A,B,输出负号

4.从低位到高位,逐位求差,借位,存差

5.把数组C从高位到低位依次输出

? ? ? ? 1.2为准备(和加法同理)

	vector<int> A, B, C;
	string st1,st2;
	cin >> st1 >> st2;
	int len1 = st1.size(), len2 = st2.size();
	for (int i = len1 - 1; ~i ; i--) A.push_back(st1[i] - '0');
	for (int i = len2 - 1; ~i ; i--) B.push_back(st2[i] - '0');

? ? ? ? 3????????若A<B,则交换A,B,输出负号

	if (cmp(A, B)) swap(A, B), cout << '-';

若A<B返回true的比较函数cmp()

bool cmp(vector<int> A, vector<int> B) {
	if (A.size() != B.size())
		return A.size() < B.size();
	for (int i = A.size() - 1; ~i; i--)
		if (A[i] != B[i]) 
			return A[i] < B[i];
//若A=B,返回false,避免给0加上负号
	return false;
}

? ? ? ? 4为减法的具体实现

void sub(vector<int> A, vector<int> B, vector<int>& C) {
	int t, la = A.size(), lb = B.size();
	for (int i = 0; i < la; i++) {
		t = A[i];
		if (i < lb)t -= B[i];
		if (t < 0) A[i + 1]--, t += 10;//借位
		C.push_back(t);//存差
	}//C.back()返回最后一个元素,类似C[C.size()-1]
	while (C.size() > 1 && !C.back()) C.pop_back();
}//高位连续的0没有意义,需要去掉

? ? ? ? 5为结果输出,翻转输入所以也一定要翻转输出!!!

	for (int i = C.size() - 1; ~i; i--) cout << C[i];

测试


高精度乘法步骤:

1.高精度数字利用字符串读入

2.把字符串翻转存入两个整型数组A、B

3.从低位到高位,累加成绩,进位,存余

4.把数组C从高位到低位依次输出

文章来源:https://blog.csdn.net/2302_79277225/article/details/135636080
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。