大数相乘
#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; }