#include<iostream>
#define M 600
using namespace std;
void longMult(char A[],char B[],char res[]);
void strRev(char str[]);
bool isZero(char str[]);
int main()
{
char num1[M/2],num2[M/2],res[M];
//freopen("in.txt","r",stdin);
while(scanf("%s%s",num1,num2)==2)
{
if(isZero(num1)||isZero(num2))
{
printf("0\n");
continue;
}
longMult(num1,num2,res);
printf("%s\n",res);
}
return 0;
}
void longMult(char A[],char B[],char res[])
{
int i,j,k,c,m;
strRev(A);strRev(B);
for(i=0;i<M;i++)res[i]='\0';
for(i=0;B[i];i++)
{
c=0;
k=i;
for(j=0;A[j];j++)
{
m=(A[j]&15)*(B[i]&15)+c+(res[k]&15);
res[k++]=(m%10)|48;
c=m/10;
}
if(c)
{
res[k++]=(c%10)|48;
if(c/10)res[k]=(c/10)|48;
}
}
strRev(res);
}
void strRev(char str[])
{
int i,len=strlen(str),n=len/2;
for(i=0;i<n;i++)
{
str[i]=str[i]^str[len-i-1];
str[len-i-1]=str[i]^str[len-i-1];
str[i]=str[i]^str[len-i-1];
}
}
bool isZero(char str[])
{
int i,z=0;
for(i=0;str[i];i++)
if(str[i]&15)return false;
return true;
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.