高精度乘法
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[2001],b[2001],c[2005];
int main(){
//1.输入2个字符串
cin>>s1>>s2;
//2.创建3个整数数组
//3.获取字符串的长度
int l1 = s1.size();
int l2 = s2.size();
//4.逆序存储数字
for(int i=0;i<l1;i++){
a[l1-i-1] = s1[i]-'0';
}
for(int i=0;i<l2;i++){
b[l2-i-1] = s2[i]-'0';
}
//5.遍历 进行乘法操作
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
c[i+j] += a[i]*b[j];//逐位相乘
c[i+j+1] += c[i+j]/10;
c[i+j] %= 10;
}
}
//6.去除前导0
int l3 = l1+l2;//做多的乘积位数
while(c[l3-1]==0 && l3>1) l3--;
//7.逆序输出
for(int i=l3-1;i>=0;i--){
cout<<c[i];
}
return 0;
}
高精度除法
#include<bits/stdc++.h>
using namespace std;
string s1;//被除数
int a[1001],c[1001];
long long b,y;//b除数 y:上次除法余数
int main(){
//高精度 / 低精度
cin>>s1>>b;
//1.顺序存储被除数
int l1 = s1.size();
for(int i=0;i<l1;i++) a[i] = s1[i] - '0';
//2.模拟竖式除法
for(int i=0;i<l1;i++){
c[i] = (y*10+a[i]) / b;
y = (y*10+a[i]) % b;
}
//3.去除前导0
int idx = 0;
while(c[idx] == 0 && idx<l1){
idx++;
}
for(int i=idx;i<l1;i++){
cout<<c[i];
}
return 0;
}