题目描述
输入两个高精度整数M和N(不超过100位)。求这两个高精度数的积。
输入描述
每一组测试数据占2行,一行一个整数
输出描述
每一组测试数据输出占一行,输出乘积
样例
输入
36
3
输出
108
cpp
#include <bits/stdc++.h>
using namespace std;
// a数组用于存储s1 字符串
// b数组用于存储s2 字符串
// c数组用于存储结果,中途来存放进位,100位 × 100 位 最多是200位
int a[105],b[105],c[205];
int main(){
string s1,s2;
cin >> s1 >> s2;
int len1 = s1.size();
int len2 = s2.size();
// 翻转字符串
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
// 循环遍历字符串
for(int i=0;i<len1;i++){
a[i] = s1[i] - '0';
}
for(int i=0;i<len2;i++){
b[i] = s2[i] - '0';
}
// 高精度乘法核心代码: 逐位相乘, 需要采用嵌套for
for(int i=0;i<len1;i++){
for(int j = 0;j<len2;j++){
c[i+j] = a[i] * b[j] + c[i+j]; // 相同 的乘积 累加
}
}
//两位数 * 三位数 最多五位,最小四位。 只需要从0 循环到5就可以了
int len3 = len1+len2;
// 处理进位
for(int i=0;i<len3;i++){
// 进位: 当前位 / 10的商 加到下一位上去
c[i+1] = c[i] / 10 + c[i+1] ;
//当前位 = % 10 得到的个位
c[i] = c[i] % 10;
}
// 去除前导0
while(len3 >1 && c[len3-1] == 0){
len3--;
}
// 循环输出
for(int i = len3-1;i>=0;i--){
cout << c[i];
}
return 0;
}