大数相乘

#include<iostream>
#include<string.h>
using namespace std;


class BigNumberMutiplication{
private:
    char *num1;
    char *num2;
    char *result;
    int lenNum1;
    int lenNum2;
    void reverseNumerbs();
    void reverseNumber(char *s);
public:
    BigNumberMutiplication(char *num1,char *num2);
    char *Mutiplicate();
    void Test();
};
BigNumberMutiplication::BigNumberMutiplication(char *num1,char *num2)
{
    this->num1=num1;
    this->num2=num2;
    this->lenNum1=strlen(num1);
    this->lenNum2=strlen(num2);
    int len=this->lenNum1+this->lenNum2+1;
    result=new char[len];
    memset(result,'0',len*sizeof(char));
    result[len-1]='\0';
}

void BigNumberMutiplication::reverseNumber(char *s)
{
    int len=strlen(s);
    int i=0;
    while(i<len/2)
    {
        char tmp=s[i];
        s[i]=s[len-1-i];
        s[len-1-i]=tmp;
        i++;
    }

}

void BigNumberMutiplication::reverseNumerbs()
{
    reverseNumber(this->num1);
    reverseNumber(this->num2);
}

void BigNumberMutiplication::Test()
{
    cout<<this->num1<<endl<<this->num2<<endl;
    cout<<"after reverse"<<endl;
    this->reverseNumerbs();
    cout<<this->num1<<endl<<this->num2<<endl;
}

char *BigNumberMutiplication::Mutiplicate()
{
    this->reverseNumerbs();
    int i=0;
    int j=0;
    for(i=0;i<this->lenNum1;i++)
    {
        int incrs=0;
        int addIncrs=0;
        for(j=0;j<this->lenNum2;j++)
        {
            int multiTmp=(this->num1[i]-48)*(this->num2[j]-48)+incrs;
            incrs=multiTmp/10;
            int rest=multiTmp%10;

            int addTmp=(this->result[i+j]-48)+rest+addIncrs;
            addIncrs=addTmp/10;
            this->result[i+j]=addTmp%10+48;
        }
        this->result[i+j]+=addIncrs+incrs;
    }

    this->reverseNumber(this->result);
    return this->result;
}


int main()
{
    char a[]="12345678909876543210";
    char b[]="12345678909876543210";

    cout<<a<<endl<<b<<endl;

    BigNumberMutiplication *multipliacation=new BigNumberMutiplication(a,b);
    char *tmp= multipliacation->Mutiplicate();
    cout<<tmp<<endl;

    int s;
    cin>>s;
}

 

posted @ 2016-11-23 16:46  lxdonge  阅读(154)  评论(0编辑  收藏  举报