一、高精度乘法
#include <bits/stdc++.h>
using namespace std;
string sa, sb;
int la, lb, lc, jw, f, w, a[101], b[101], c[10200];
void bm()
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
la = sa.size();
lb = sb.size();
for (int i = 0; i < la; i++)
a[la - i - 1] = sa[i] - '0';
for (int i = 0; i < lb; i++)
b[lb - i - 1] = sb[i] - '0';
jw = 0;
for (int i = 0; i < la; i++)
for (int j = 0; j < lb; j++)
{
f = a[i] * b[j];
jw = f / 10;
f %= 10;
w = i + j;
c[w] = c[w] + f;
c[w + 1] = c[w + 1] + jw + c[w] / 10;
c[w] %= 10;
}
lc = lb + la;
while (!c[lc])
lc--;
if (lc < 0)
cout << "0" << endl;
else
{
for (int i = lc; i >= 0; i--)
cout << c[i];
cout << endl;
}
return;
}
int main()
{
ios::sync_with_stdio(false);
while (cin >> sa >> sb)
{
bm();
}
return 0;
}
二、高精度加法
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a1[1000], b1[1000];
int a[1000] = {0}, b[1000] = {0}, c[1000] = {0}, la, lb, lc, i, x;
cin >> a1 >> b1;
la = strlen(a1);
lb = strlen(b1);
for (i = 0; i <= la - 1; i++)
{
a[la - i] = a1[i] - 48;
}
for (i = 0; i <= lb - 1; i++)
{
b[lb - i] = b1[i] - 48;
}
lc = 1, x = 0;
while (lc <= la || lc <= lb)
{
c[lc] = a[lc] + b[lc] + x;
x = c[lc] / 10;
c[lc] %= 10;
lc++;
}
c[lc] = x;
if (c[lc] == 0)
{
lc--;
}
for (i = lc; i >= 1; i--)
{
cout << c[i];
}
cout << endl;
return 0;
}