您的位置:首页 > 编程语言 > C语言/C++

C语言大数相乘

2014-11-17 15:22 183 查看
#include

#include

#include

#define len 20

void display(int *result,int length);

void displayAll(int *result,int length);

int * init(int *r,int length);

int * add(int *r1,int *r2,int length);

int * moveLeft(int *result,int length);

int main()

{

int i,j,t,n,temp;

char mult1[len];

char mult2[len];

printf("Input two big numbers:\n");

scanf("%s %s",mult1,mult2);

int len1 = strlen(mult1);

int len2 = strlen(mult2);

int *c1 = (int *)malloc(sizeof(int)*len1);

int *c2 = (int *)malloc(sizeof(int)*len2);

int *result = (int *)malloc(sizeof(int)*(len1+len2));

int *tempResult = (int *)malloc(sizeof(int)*(len1+len2));

for(i=0; i

c1[i]=(int)mult1[i]-48;

for(i=0; i

c2[i]=(int)mult2[i]-48;

n=len1+len2;

int resultLength=n;

init(result,n);

init(tempResult,n);

n--;

temp=0;

for(i=len2-1; i>-1;i--){

t=c2[i];

printf("%d*",t);

int flag=0;//进位

init(tempResult,resultLength);

n=resultLength-1;

for(j=len1-1; j>-1 ;j--)

{

printf("%d=",c1[j]);

temp=t*c1[j]+flag;

flag=temp/10;

tempResult
=temp;

printf("%d,进位:%d\n",tempResult
,flag);

n--;

}

if(n>-1)

tempResult
+=flag;

//循环左移

for(int p=len2-1-i;p>0;p--){

tempResult=moveLeft(tempResult,resultLength);

}

result=add(result,tempResult,resultLength);

displayAll(tempResult,resultLength);

}

display(result,resultLength);

return 1;

}

void displayAll(int *result,int length){

for(int i=0;i

printf("%d",result[i]);

}

printf("\n");

}

void display(int *result,int length){

printf("Result:");

if(result[0]!=0)

printf("%d",result[0]);

for(int i=1;i

printf("%d",result[i]);

}

printf("\n");

}

int * moveLeft(int *result,int length){

for(int k=0;k

if(k!=length-1)

result[k]=result[k+1];

else

result[k]=0;

}

return result;

}

int * add(int *r1,int *r2,int length){

int flag=0;

for(int i=length-1;i>=0;i--){

int temp=r1[i]+r2[i]+flag;

flag=temp/10;

r1[i]=temp;

}

return r1;

}

int * init(int *r,int length){

for(int i=0; i<length;i++)

r[i]=0;

return r;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: