方法一:A*B,像竖式乘法那样每次用B的一位去乘以A的每一位,再叠加
如1234*123=1234*3+1234*2+1234*1;
方法二:先算然后再把每一位相加,就是先不算任何的进位,将每一位相乘,然后相加的结果加到同一个位置上,到最后才计算进位。
方法三:分治算法
方法一c++代码
#include <iostream>
using namespace std;
int main(){
string a, b;
while (cin >> a) {
cin >> b;
int num[10000] = { 0 };
int i, j, k=0;
int lena = a.size();
int lenb = b.size();
int carry;
for (i = lenb-1; i >=0; i--) {
carry = 0;
k = lenb-1-i;
for (j = lena-1; j >=0; j--) {
carry = (a[j] - '0')*(b[i] - '0')+carry;
num[k] += carry % 10;
while (num[k] > 9) {
carry += num[k] / 10 * 10;
num[k] %= 10;
}
k++;
carry /= 10;
}
while (carry != 0) {
num[k++] = carry % 10;
carry /= 10;
}
}
for (i = k-1; i>=0;i--)
cout << num[i];
cout << endl;
}
return 0;
}
方法二代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
string a, b;
while (cin >> a) {
cin >> b;
int num[10000] = { 0 };
int i, j, k=0;
int lena = a.size();
int lenb = b.size();
int carry;
for (i = lenb-1; i >=0; i--) {
k = lenb-1-i;
for (j = lena-1; j >=0; j--) {
num[k++] += (a[j] - '0')*(b[i] - '0');
}
}
carry = 0;
for (i = 0; i < k; i++) {
int temp = num[i] + carry;
num[i] = temp % 10;
carry = temp / 10;
}
while (carry > 0) {
num[k++] = carry % 10;
carry /= 10;
}
for (i = k-1; i>=0;i--)
cout << num[i];
cout << endl;
}
return 0;
}