整数大数乘法以及小数大数乘法实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

声明:本算法可以实现整数乘以整数,小数乘以小数功能。但是小数只能是小数点前不为0 的小数。比如0.1之类的不适用。

#include

#include

using namespace std;

void multiply(const char*a,const char*b)

{

int length1=strlen(a);

int length2=strlen(b);

int*p=new int[length1+length2];

for(int i=0;i

{

p[i]=0;

}

for(int i=0;i

{

for(int j=0;j

{

p[i+j+1]+=(a[i]-'0')*(b[j]-'0');

}

}

for(int i=length1+length2-1;i>=0;i--)

{

if(p[i]>=10)

{

p[i-1]+=p[i]/10;

p[i]=p[i]%10;

}

}

char*pp=new char[length1+length2+1];

int count=0;

while(p[count]==0)

{

count++;

}

int i1;

for(i1=0;count

{

pp[i1]=(p[count]+'0');

}

pp[i1]='\0';

cout<

delete[]p;

delete[]pp;

}

void dianmultiply(const char*a,const char*b)

{

int place1=0;

int place2=0;

char*newp1=new char[strlen(a)];

char*newp2=new char[strlen(b)];

int k1=0;

int k2=0;

for(int i=0;i

{

if(a[i]!='.')

{

newp1[k1]=a[i];

k1++;

}

else

{

place1=i;

}

}

newp1[k1]='\0';

/*cout << newp1 << endl;*/

for(int i=0;i

{

if(b[i]!='.')

{

newp2[k2]=b[i];

k2++;

}

else

{

place2=i;

}

}

newp2[k2]='\0';

/*cout << newp2 << endl;*/

int length1=strlen(newp1);

int length2=strlen(newp2);

//cout << length1 << " " << length2 << endl;

//cout << place1 << " " << place2 << endl;

int*p=new int[length1+length2];

for(int i=0;i

{

p[i]=0;

}

for(int i=0;i

{

for(int j=0;j

{

p[i+j+1]+=(newp1[i]-'0')*(newp2[j]-'0');

}

}

for(int i=length1+length2-1;i>=0;i--)

{

if(p[i]>=10)

{

p[i-1]+=p[i]/10;

p[i]=p[i]%10;

}

}

//cout << p << endl;

char*pp=new char[length1+length2+2];

int count=0;

while(p[count]==0)

{

count++;

}

int weizhi=0;

if(place1!=0)

{

place1=strlen(a)-place1-1;

weizhi+=place1;

}

if(place2!=0)

{

place2=strlen(b)-place2-1;

weizhi+=place2;

}

int i1;

/*cout << count << endl;*/

int length=length1+length2-count;

int flag=0;

int tem=count;

for(i1=0;count

if(tem==0)

{

if(count==length-weizhi&&flag==0)

{

pp[i1]='.';

count--;

flag++;

}

else

{

pp[i1]=(p[count]+'0');

}

}

else

{

if(count==length-weizhi+1&&flag==0)

{

pp[i1]='.';

count--;

相关文档
最新文档