c++高精度乘法

废话少说

先看题干

  高精度乘法    
试题描述
任给两个长度不超过100位的大整数,求两个数相乘的精确结果。
输入格式
两行,分别是两个非负的大整数。
输出格式
输出一行,表示两数相乘的结果,不能有多余的前导0。
输入样例1
12345678900
98765432100
输出样例1
1219326311126352690000

看看这夸张的位数

实在是让人眼花缭乱啊!

首先不要慌张

乘法本质上和加法一样

所以我们还是用写高精度加法的方法来写

而高精度加法

麻烦的无非就是一个进位问题

和一个转化为字符串的过程

把这个解决了

高精度乘法就是个

我们先来解决转化问题

string s1,s2;//设字符串
cin>>s1>>s2;输入
lena=s1.size();//储存长度,方便写代码
lenb=s2.size();
for(int i=0;i

非常简单且自然我们会想出上面的代码

注意:循环是从0开始

下面是进位的问题

我们可以先✖️

for(int i=0;i

然后进位

c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;

这里和高精度加法不一样的地方是

高精度加法是一个循环,从0到max(lena,lenb);

而乘法是两个循环

因为你不可能后面乘着全是0了吧!

至于i+j

是因为乘积的下标是他

i+j+1就和加法一样的

总结

1.高精度乘法我们要模拟高精度加法来写

2.要理解i+j的含义

接下来上代码!

#include
using namespace std;
const int qwq=1005;
int a[qwq],b[qwq],c[qwq],lena,lenb;
int main(){
string s1,s2;
cin>>s1>>s2;
lena=s1.size();
lenb=s2.size();
for(int i=0;i1) ans--;
for(int i=0;i

 谢谢大家

你可能感兴趣的:(c++)