大整数乘法算法

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

// 大整数.cpp : Defines the entry point for the console application. //

#include "stdafx.h"

#include

using namespace std;

int i=0;

void cha(int * A,int * B,int * E,int t)

{

int k;

if(B[1]>A[1])

{

E[0]=1;

for(int j=t;j>0;j--)

{

if(B[j]

{

E[j]=(B[j]+10)-A[j];

cout<<"E["<

k=j-1;

B[k]=B[k]-1;

}

else

{

E[j]=B[j]-A[j];

cout<<"E["<

}

}

}

else

{

E[0]=0;

for(int j1=t;j1>0;j1--)

{

if(A[j1]

{

E[j1]=(A[j1]+10)-B[j1];

cout<<"E["<

k=j1-1;

A[k]=A[k]-1;

}

else {E[j1]=A[j1]-B[j1];

cout<<"E["<

}

}

}

double mul(int * x,int * y,int n)//n为整数位数,而n+1为数组的存储空间

{i++;

cout<<"i="<

cout<<"x[0]="<

cout<<"y[0]="<

int t=n/2;

int ty=0;

if(((x[0]==0)&&(y[0]==0))||((x[0]==1)&&(y[0]==1)))

{

ty=0;

}

else ty=1;

if(n==1)

{

if(ty==1)

{cout<<"n="<

return -x[n]*y[n];

}

else

{cout<<"n="<

return x[n]*y[n];}

}

else

{

int * A,* B,* C,* D,* E,* F;

A=new int [t+1];B=new int [t+1];C=new int [t+1];D=new int [t+1];E=new int [t+1];F=new int [t+1];

A[0]=0;B[0]=0;C[0]=0;D[0]=0;

for(int i=1;i<=t;i++)

{

A[i]=x[i];cout<<"A["<

B[i]=x[t+i];cout<<"B["<

C[i]=y[i];cout<<"C["<

D[i]=y[t+i];cout<<"D["<

}

double m1=mul(A,C,t);

cout<<"m1="<

double m3=mul(B,D,t);cout<<"m3="<

cha(A,B,E,t);

cha(D,C,F,t);

double m2=mul(E,F,t);cout<<"m2="<

int k=1,g=1;

for(int j=1;j<=n;j++)

{

k=k*10;

}

for(int l=1;l<=t;l++)

{

g=g*10;

}

double s=m1*k+(m1+m2+m3)*g+m3;

if(ty==1){s=-s;}

cout<<"s="<

return s;

}

}

void input(int * x,int num)

{

cout<<"输入乘数值第一个值为符号位0为正1为负"<

for(int p=0;p<=num;p++)

{

cin>>x[p];

}

}

int main(int argc, char* argv[])

{

int * x,* y;int num=0;

cout<<"输入位数"<

cin>>num;

x=new int [num+1];

y=new int [num+1];

input(x,num);

input(y,num);

cout<<"输入完成!"<

cout<<"xy="<

return 0;

}

相关文档
最新文档