
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define sign(x) ((x>0)?1:-1)
//_int64等同于long long
//%I64d等同于%lld
_int64 mutipy(_int64 a, _int64 b, int num) { //两个long long 类型的大整数相乘,后面会用字符串做法解决
int s = sign(a) * sign(b);
a = (a > 0) ? a : -a;
b = (b > 0) ? b : -b;
if (num == 0) //递归出口,
return 0;
else if (num == 1) { //当a,b只有一位数时,直接相乘
return s * a * b;
}
else {
_int64 A = a / (int)pow(10, (int)(num / 2)); //分离大整数a的高位
_int64 B = a % (int)pow(10, (int)(num / 2)); //分离大整数a的低位
_int64 C = b / (int)pow(10, (int)(num / 2)); //分离大整数b的高位
_int64 D = b % (int)pow(10, (int)(num / 2)); //分离大整数b的低位
_int64 AC = mutipy(A, C, (int)(num / 2)); //分治计算AC
_int64 BD = mutipy(B, D, (int)(num / 2)); //分治计算BD
_int64 ABCD = mutipy((A - B), (D - C), (int)(num / 2)) + AC + BD; //计算(A-B)(D-C)+AC+BD
return s * (_int64)(AC * pow(10, (int)(num / 2) + (int)(num / 2)) + ABCD * pow(10, (int)(num / 2)) + BD); //返回结果
}
}
int main()
{
_int64 a, b, c, temp; //long long a,b,c;
int len1 = 0, len2 = 0;
while (scanf("%I64d %I64d", &a, &b)) {
temp = a;
while (temp) { //计算a的位数
len1++;
temp = temp / 10;
}
c = mutipy(a, b, len1);
printf("%I64d\n", c);
}
return 0;
}