大数相乘模板

来源:互联网 发布:平安科技待遇 知乎 编辑:程序博客网 时间:2024/06/05 13:34

 自己以前的写的一个两个大数数相乘

#include<stdio.h>#include<string.h>using namespace std;#define N 2000char z[N],a[1000],b[1000],c[N];int l1,l2;void jf(){    int i;    for(i=N-1; i>=0; i--)    {        if(c[i]+z[i]-96>9)        {            z[i-1]=z[i-1]+1;            z[i]=z[i]+c[i]-48-10;        }        else z[i]=c[i]+z[i]-48;    }    return ;}void  cf(int g,char A){    int i,j,cs,k;    for(i=l1-1; i>=0; i--)    {        memset(c,'0',sizeof(c));        cs=(a[i]-'0')*(A-'0');        for(j=l1-1-i+g,k=N-1; j>0; j--,k--)            c[k]='0';        while(cs!=0)        {            c[k]=cs%10+48;            cs=cs/10;            k--;        }        jf();    }    return ;}int main(){    int i,k;    while(gets(a))    {  gets(b);        memset(z,'0',sizeof(z));        l1=strlen(a);        l2=strlen(b);        for(i=l2-1; i>=0; i--)            cf(l2-1-i,b[i]);        for(k=0; k<=N-1; k++)            if(z[k]!='0') break;            if(k==N) printf("0");      else  for(; k<=N-1; k++)            printf("%c",z[k]);        printf("\n\n");    }    return 0;}

下面的这个是大数的阶乘

#include<bits/stdc++.h>using namespace std;#define N 1000char z[N],a[1000],b[1000],c[N];int l1,l2;int fz(){    int k=0;    for(int i=0; i<=N-1; i++)    {        if(z[i]==0) continue;        else   a[k++]=z[i];    }    return k;}void jf(){    int i;    for(i=N-1; i>=0; i--)    {        if(c[i]+z[i]-96>9)        {            z[i-1]=z[i-1]+1;            z[i]=z[i]+c[i]-48-10;        }        else z[i]=c[i]+z[i]-48;    }    return ;}void  cf(int g,char A){    int i,j,cs,k;    for(i=l1-1; i>=0; i--)    {        memset(c,'0',sizeof(c));        cs=(a[i]-'0')*(A-'0');        for(j=l1-1-i+g,k=N-1; j>0; j--,k--)            c[k]='0';        while(cs!=0)        {            c[k]=cs%10+48;            cs=cs/10;            k--;        }        jf();    }    return ;}void cfsc(){    int k;    for(k=0; k<=N-1; k++)        if(z[k]!='0') break;    if(k==N) printf("0");    else  for(; k<=N-1; k++)            printf("%c",z[k]);    printf("\n");}int main(){    int i,k;    int n,t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        memset(z,'0',sizeof(z));        z[N-1]='1';        for(int dt=1; dt<=n; dt++)        {            l1=fz();            itoa(dt,b,10);            memset(z,'0',sizeof(z));            l2=strlen(b);            for(i=l2-1; i>=0; i--)                cf(l2-1-i,b[i]);        }        cfsc();    }    return 0;}

原创请标明出处 http://blog.csdn.net/xky140610205?viewmode=contents

原创粉丝点击