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

/*
 * 文件名: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;
    }
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值