#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void printResult(int *C, int n)
{
int i;
for (i=0; i<n && C[i]==0; ++i) /*跳过头部的0元素*/
;
for (; i<n; ++i)
{
printf("%d", C[i]);
}
printf("\n");
}
void multiply(char const *A, char const *B)
{
int i, j, lenA, lenB, *C;
if (A==NULL || B==NULL)
{
return ;
}
lenA = strlen(A);
lenB = strlen(B);
C = (int *)malloc(sizeof(int)*(lenA+lenB));
memset(C, 0, sizeof(C)*(lenA+lenB));
for (i=lenB-1; i>=0; --i)
{
for (j=lenA-1; j>=0; --j)
{
C[i+j+1] += (B[i] - '0') * (A[j] - '0'); /*产生每一位未进位之前的结果,很巧妙,类似于优化的矩阵乘法*/
}
}
for (i=lenA+lenB-1; i>=1; --i)
{
C[i-1] += C[i] / 10; /*进位加到高位上*/
C[i] %= 10;
}
printResult(C, lenA+lenB);
free(C);
C = NULL;
}
int main(void)
{
char A[N], B[N];
while (scanf("%s%s", A, B) != EOF)
{
multiply(A, B);
}
return 0;
}