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

C语言实现多达50位数相乘的运算

2018-03-15 14:41 330 查看
/*
* 文件名:multiply.c
* 功能:实现支持50位数乘以50位数<用bc命令验证结果>
* 编辑人:王廷云
* 编辑时间:2017-12-20
*/
#include <stdio.h>
#include <string.h>

#define      NR        50

void reserverString(char *s);

int main(void)
{
//+1===>'\0'
char  v1[NR+1],v2[NR+1],sum[2*NR+1]={0};

printf("输入乘数  :");
scanf("%s",v1);
printf("输入被乘数:");
scanf("%s",v2);
/////////////////////////////
//字符串翻转(数据低位在低下标)
reserverString(v1);
reserverString(v2);

//printf("v1:%s\n",v1);
//printf("v2:%s\n",v2);
int i,j,num,flag;
for(i=0;v1[i];i++)//乘数
{
for(j=0;v2[j];j++)//被乘数
{
//乘数I位 乘以 被乘数的J位 累加在积的I+J位
sum[i+j]=sum[i+j]+(v1[i]-'0')*(v2[j]-'0');
}
//检查积是否可进位
flag=0;
for(j=0;j<2*NR;j++)
{
num=sum[j]+flag;
flag=num/10;
sum[j]=num%10;
}
}
///////show result/////////////
printf("积:");
for(i=2*NR;i>0;i--)//去除前导0
{
if(sum[i]!=0)
break;
}
while(i>=0)
{
printf("%d",sum[i]);
i--;
}
putchar('\n');

return 0;
}
void reserverString(char *s)
{
int i,len=strlen(s);
char temp;
for(i=0;i<len/2;i++)
{
temp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=temp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息