高精度正整数乘法

目录

正片开始

全篇代码


乘法略微有一点难,废话不多说,直接开始

学习之前你需要掌握:for循环,while循环,数组,字符串

正片开始

老规矩,输入,求长度,导入

	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size();
	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';

接下来要开始“乘”了

思想:c数组的第i位=a数组的第i位*b数组的第i位+进位+c数组的第i位

	for(i=0;i<la;i++){
		x=0;
		for(j=0;j<lb;j++){
			c[i+j]=a[i]*b[j]+x+c[i+j];
			x=c[i+j]/10;
			c[i+j]%=10;
		}
		c[i+lb]=x;
	}

最后,去零!!!

	lc=la+lb;
	while(c[lc]==0 && lc>0) lc--;

输出,完成!

	while(c[lc]==0 && lc>0) lc--;
	for(i=lc;i>=0;i--) cout<<c[i];

全篇代码

//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=10100;
int a[mx],b[mx],c[mx];
int la,lb,lc,i,j,x;
int main()
{
	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size();
	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
	for(i=0;i<la;i++){
		x=0;
		for(j=0;j<lb;j++){
			c[i+j]=a[i]*b[j]+x+c[i+j];
			x=c[i+j]/10;
			c[i+j]%=10;
		}
		c[i+lb]=x;
	}
	lc=la+lb;
	while(c[lc]==0 && lc>0) lc--;
	for(i=lc;i>=0;i--) cout<<c[i];
    return 0;
}

谢谢

posted @ 2022-09-17 16:58  Euouae  阅读(20)  评论(0编辑  收藏  举报