整数大数乘法以及小数大数乘法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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--;