3.高精度乘法
#include<iostream> // 引入输入输出流库
#include<cstring> // 引入字符串处理库
using namespace std;
char s1[2005], s2[2005]; // 用于存储输入的两个大数
int a[2005], b[2005], c[2005]; // 数组用于存储数字和结果
int main()
{
int la, lb, lc; // 分别存储s1和s2的长度,以及结果的长度
cin >> s1; // 从标准输入读取第一个大数
cin >> s2; // 从标准输入读取第二个大数
la = strlen(s1); // 计算第一个大数的长度
lb = strlen(s2); // 计算第二个大数的长度
// 将字符串s1中的字符转换为数字,存储在数组a中,逆序存储
for (int i = 0; i < la; i++)
{
a[la - i] = s1[i] - '0'; // 将字符转为对应的整数
}
// 将字符串s2中的字符转换为数字,存储在数组b中,逆序存储
for (int i = 0; i < lb; i++)
{
b[lb - i] = s2[i] - '0'; // 将字符转为对应的整数
}
lc = la + lb; // 结果的最大可能长度是两个数长度的和
// 进行大数乘法,类似手动乘法的过程
for (int i = 1; i <= la; i++)
{
for (int j = 1; j <= lb; j++)
{
c[i + j - 1] += a[i] * b[j]; // 计算对应位a的乘积并加到结果中
c[i + j] += c[i + j - 1] / 10; // 处理进位
c[i + j - 1] %= 10; // 当前位保持在0-9之间
}
}
// 如果结果最高位为0且该结果不为0,减少结果长度
if (c[lc] == 0 && lc > 0) lc--;
// 从高位到低位输出结果
for (int i = lc; i > 0; i--)
cout << c[i]; // 输出结果数组中的数字
return 0; // 返回0表示程序正常结束
}
标签:lb,大数,int,s2,s1,la,蓝桥,格式
From: https://www.cnblogs.com/zzzxyy/p/18436521