#include <iostream>
#include <string>
using namespace std;
string max_i,min_i;
string count_add(string s1,string s2) //进行两个数相加
{
max_i = s1;min_i = s2;
if(s2.size()>s1.size())
{
max_i = s2; //取长度大的数为max
min_i = s1;
}
for(int i = min_i.size()-1,j = max_i.size()-1; i>=0;i--,j--) //模拟整数加的过程
{
max_i[j] += min_i[i] -'0'; //选择将结果保存在max变量中
if(max_i[j] > '9') //字符值大于9需要处理
{
if(j > 0)
{
max_i[j - 1] ++;
max_i[j] -= 10;
}
else
{
max_i = "1" + max_i;
max_i[j] -= 10;
}
}
}
return max_i;
}
int main()
{
string s1,s2; //直接按字符串乘
cin>>s1>>s2;
int i,j;
bool nega_s1 = false,nega_s2 = false;//标记负数
//负数情况
if(s1[0] == '-') //若带负号,则取出数字部分
{
nega_s1 = true;
s1 = s1.substr(1); //选取第一位以后的字符串重新赋值给s1
}
if(s2[0] == '-')
{
nega_s2 = true;
s2 = s2.substr(1);
}
char unit, decade = '0'; //个位 十位
int a,b;
string result_one[s2.size()]; //保存中间的s2的每一位乘s1的结果
//模拟相乘过程
for(i = s2.size()-1; i >= 0; i--) //倒序循环
{
a = s2[i] - '0';
for(j = s1.size()-1; j >= 0; j--)
{
b = s1[j] - '0';
unit =((a * b) + decade - '0') % 10 + '0' ; //保存两个数字相乘的个位、十位
decade = ((a * b) + decade - '0') / 10 + '0';
result_one[s2.size() -1- i] = unit + result_one[s2.size() -1- i] ; //按顺序输入
}
if(decade != '0') //十位
result_one[s2.size() -1- i] = decade + result_one[s2.size() -1- i];
decade = '0';
}
for(i = 0; i < s2.size(); i++) //对中间结果补齐位数
{
for(j = i;j > 0; j--)
{
result_one[i] = result_one[i] + '0';
}
}
string sum = "0"; //用sum变量保存最终结果
for(i = 0;i < s2.size(); i++)
{
sum = count_add(sum,result_one[i]); //相加
}
int tip = 0;
for(i = 0; i < sum.size(); i++) //找出非零的起始位置
{
if(sum[i] == '0' )
{
tip ++;
}
else
break;
}
if(nega_s1 + nega_s2 == 1) //输出符号
cout<<"-";
for(i = tip ; i < sum.size(); i++) //输出数字部分答案
{
cout<<sum[i];
}
if(tip == sum.size())
cout<<"0";
return 0;
}