题意: 高精度乘法。
思路: 直白的高精度乘法。 核心代码是 乘 的那部分。经常忘记。
算法复杂度: o(N^2) N是数的位数。
代码:
#include <cstdio>
#include <cstring>
using namespace std;
#define MAX_N 1000
void toDigit(char *str, int *digit)
{
int len = strlen(str);
for (int i = 0, j = len - 1; i < len; i++, j--) {
digit[i] = (int)(str[j] - '0');
}
}
int main()
{
char strNumA[MAX_N], strNumB[MAX_N];
while (scanf("%s%s", strNumA, strNumB) == 2) {
int dgtNumA[MAX_N], dgtNumB[MAX_N], rslt[MAX_N];
memset(dgtNumA, 0, sizeof(dgtNumA));
memset(dgtNumB, 0, sizeof(dgtNumB));
memset(rslt, 0, sizeof(rslt));
int lenA = strlen(strNumA);
int lenB = strlen(strNumB);
if (strNumA[0] == '0' || strNumB[0] == '0') {
printf("0\n");
continue;
}
toDigit(strNumA, dgtNumA);
toDigit(strNumB, dgtNumB);
for (int i = 0; i <= lenA; i++) {
int s = 0;
for (int j = 0; j <= lenB; j++) {
s = rslt[i+j] + s + dgtNumA[i] * dgtNumB[j];
rslt[i+j] = s % 10;
s = s / 10;
}
}
int i = MAX_N;
while (i >= 0 && rslt[--i] == 0);
while (i >= 0) {
printf("%d", rslt[i--]);
}
printf("\n");
}
return 0;
}