Saturday, April 9, 2011

10106 - Product


#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.