自学内容网 自学内容网

06| 高精度乘法

一、核心思路

        利用字符串读入,逆序存入数组;利用数组模拟行列式乘法,采用无进位乘法;将结果输出

二、细节注意

        采用无进位乘法,注意下标逻辑,后续在统一处理进位

三、代码实现

const int N = 4e6 + 10;
int a[N] = {0}, b[N] = {0}, c[N] = {0};
int n1, n2;

int main()
{
string s1, s2;
cin >> s1 >> s2;
if (s1 == "0" || s2 == "0")
{
cout << 0;
exit(0);
}
n1 = s1.size(), n2 = s2.size();

reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());

for (int i = 1; i <= n1; i++) a[i] = s1[i-1] - '0';
for (int i = 1; i <= n2; i++) b[i] = s2[i-1] - '0';

int n = n1 + n2;
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++) 
{
// 无进位乘法 
int x = a[i] * b[j];
c[i + j - 1] += x;
}
}
for (int i = 1; i <= n; i++)
{
c[i+1] += c[i] / 10; // 进位 
c[i] = c[i] % 10; // 留余 
 } 
// 去前导零,保证至少保留1位数字
while (n > 1 && c[n] == 0)    n--;
// 输出结果
for (int i = n; i >= 1; i--) cout << c[i]; 
cout << endl; 
return 0;
}

原文地址:https://blog.csdn.net/2501_90419475/article/details/156953174

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!