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

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

#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;
    }
}

你可能感兴趣的:(C语言,C语言,超多位数相乘)