高精度乘法(C++实现)

2023-05-16

【算法分析】
1.C++不支持大数运算,故而引入高精度算法。
2.高精度乘法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1.length()-i-1]-'0';)
3.对最高位做判断,删除前导0,然后输出便得结果。

【程序代码】

#include <bits/stdc++.h>
using namespace std;

int a[100],b[100],c[100];

int main() {
	string s1,s2,t;
	cin>>s1>>s2;

	for(int i=0; i<s1.length(); i++) {
		a[i]=s1[s1.length()-i-1]-'0';
	}
	for(int i=0; i<s2.length(); i++) {
		b[i]=s2[s2.length()-i-1]-'0';
	}

	for(int i=0; i<s1.length(); i++) {
		int carry=0;
		for(int j=0; j<s2.length(); j++) {
			c[i+j]+=a[i]*b[j]+carry;
			carry=c[i+j]/10;
			c[i+j]%=10;
		}
		// 每一遍循环之后的进位
		c[i+s2.length()]+=carry;
	}

	int index=s1.length()+s2.length();

	//删除前导零
	while(c[index]==0 && index>0) index--;

	for(int i=index; i>=0; i--)
		cout<<c[i];

	cout<<endl;
	return 0;
}



/*
input:
123456
654321

output:
80779853376
*/



【参考文献】
https://blog.csdn.net/lichen_yun/article/details/87557301



 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高精度乘法(C++实现) 的相关文章

随机推荐