您的位置:首页 > 其它

大数乘法(二)

2016-03-17 22:29 225 查看

乘法运算过程模拟法

首先获取输入的乘数(a)与被乘数(b)字符串,按一般乘法运算过程,先是a的最后一位数字与b的最后一位数字相乘,接着a中用于相乘的数下标递减,直到a中所有数字与b最后一位都相乘过,保存结果后再递减b中的用于相乘的数字的下标,循环下去,直到b中每一位数都与a所有数相乘完。
在这个过程中,怎么遍历出填放结果的位置和处理进位是关键。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

int main(){
char c;
char *a=(char*)malloc(sizeof(char)*1000);
char *b=(char*)malloc(sizeof(char)*1000);
memset(a,'\0',1000);    memset(b,'\0',1000);
scanf("%s",b);     scanf("%s",a);
int lena=strlen(a); int lenb=strlen(b);
int len=lena+lenb;
char *result=(char *)malloc(sizeof(char)*(len+1));
//多开辟一个字节用于存放'\0'便于输出
memset(result,'0',len);
result[len]='\0';
for(int i=lena-1;i>=0;i--){
int t=0,p=0,q=0,temp=0;
int j;
for(j=lenb-1;j>=0;j--){
p=(b[j]-'0')*(a[i]-'0');
temp=result[i+j+1]-'0'+p%10+t;
result[i+j+1]=temp%10+'0';
t=temp/10+p/10;//填放在结果里发生的进位+运算过程中的进位
}
if(t){
result[i+j+1]=result[i+j+1]+t;
}
}
//第一个位置可能没有填充进位,所以如果第一个字符为'0'就不输出
if(result[0]=='0')puts(result+1);
else puts(result);

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