大数相乘

来源:互联网 发布:赫德森太太知乎 编辑:程序博客网 时间:2024/06/09 20:03
大数相乘
简单版大数相乘模板
代码1:
#include<stdio.h>#include<string.h>int main(){    char a[110],b[110];    while(~scanf("%s %s",a,b))    {        int  c[110],d[110],e[110];        memset(e,0,sizeof(e));        int i=0,j=0;        int la=strlen(a)-1;        int lb=strlen(b)-1;        while(la>=0)        {            c[i++]=a[la--]-'0';//反转        }        int ans=i;        while(lb>=0)        {            d[j++]=b[lb--]-'0';//反转        }        int cnt=j;        for(i=0; i<ans; i++)        {            for(j=0; j<cnt; j++)            {                e[i+j]+=c[i]*d[j];//记录两个数每一位相乘的积            }        }        int t=ans+cnt;        for(i=0; i<=t; i++)        {            e[i+1]+=e[i]/10;//进位            e[i]=e[i]%10;        }        for(i=t; i>=0; i--)            if(e[i])                break;//去除前面多余的0        if(i!=-1)        {            for(j=i; j>=0; j--)                printf("%d",e[j]);        }        else//当结果是0的时候            printf("0");        printf("\n");    }    return 0;}
代码2:
#include<stdio.h>#include<string.h>char a[50001],b[50001];int c[50001],d[50001],e[50001];int main(){    while(~scanf("%s%*c%s",a,b))    {        memset(c,0,sizeof(c));        memset(d,0,sizeof(d));        memset(e,0,sizeof(e));        int i=0,j=0,la,lb,m,n,k,x,y,v,u;        la=strlen(a)-1;        lb=strlen(b)-1;        while(la>=0)            c[i++]=a[la--]-'0';        while(lb>=0)            d[j++]=b[lb--]-'0';        for(u=0;u<i;u++)        {            y=0;            x=u;            for(v=0;v<j;v++)            {                e[x]+=c[u]*d[v]+y;                e[x]=e[x]%10;                y=e[x]/10;              x++;            }        }         for(j=x+1;j>=0;j--)        {            if(e[j])                break;        }        for(i=j;i>=0;i--)            printf("%d",e[i]);        printf("\n");    }    return 0;}


1 0
原创粉丝点击