模拟加法运算
先乘法,后加法,最后进位;
需要考虑一个问题:A * B = C 之后 C 的长度是多少?
如果 B = 1 C 的长度 等于 A 的长度;
A 每乘以 B 的一位数,都会右移动一位, 这里第一次不会移动,所有移动的长度是 lenB,最长数的长度是:lenA + len B ( 不考虑进位的问题)
第三步进位,会不会出现进位的情况?
最多一个进位;
所以最后 乘积 C 的长度是 lenA + lenB + 1
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
#define MAX 1010
int main(int argc,char *argv[])
{
string a;
string b;
cin >> a >> b;
int lenA = a.length();
int lenB = b.length();
int A[MAX],B[MAX],C[MAX]={0};
for (int i = lenA -1 ; i>=0; --i) {
A[lenA - i - 1] = a[i] - '0';
}
for (int j = lenB - 1; j >= 0; --j) {
B[lenB - j - 1] = b[j] - '0';
}
for (int i = 0 ; i < lenA ; ++i) {
for (int j = 0; j < lenB; ++j) {
C[i+j] += A[i] * B[j];
}
}
int t = 0;
for ( int i = 0; i < lenA + lenB ; ++i) {
if (C[i] > 9) {
C[i+1] += C[i]/10;
C[i] = C[i]%10;
}
}
int i = lenA + lenB ;
while(i>=0 && C[i]==0) {
i--;
}
while(i>=0) {
cout<<C[i];
--i;
}
return 0;
}