【模版】大数乘法、加法模版

来源:互联网 发布:淘宝延长收货怎么用 编辑:程序博客网 时间:2024/05/22 13:58

啦啦啦,模版终于写出来了,以后大数的乘加法再也不担心了。

介于只对自己的个别数据进行了测试,所以还是把模版晒出来吧,大家一起试试,有问题一定要第一时间反馈啊!!

还有,那些逃避指针的小伙伴们,咳咳,我就不说什么了,反正打死你们也不相信我没用指针。

 

//大数问题之大数(250位)乘法、加法模版#include<stdio.h>#include<string.h>void hs(char *s,long long *n); //由字符串变为整形数组void pr(long long *n,int num); //打印整形数组(大数)char sn1[260];     //输入第一个大数char sn2[260];     //输入第二个大数long long n1[70];  //保存第一个大数long long n2[70];  //保存第二个大数long long en[150]; //保存最后结果int main(){    int i,k;    while (~scanf ("%s%s",sn1,sn2))    {        //乘法特殊情况        if (sn1[0] == '0' || sn2[0] == '0')        {            printf ("0\n");            continue;        }        //初始化        memset (n1,0,sizeof n1);        memset (n2,0,sizeof n2);        memset (en,0,sizeof en);        //把字符串转化为整形数组        hs (sn1,n1);        hs (sn2,n2);        //计算        //乘法        for (i = 69;i >= 0;i--)            for (k = 69;k  >= 0;k--)            {                en[i + k + 1] += n1[i] * n2[k];            }        //加法        for(i = 69;i >= 0;i--)            en[i + 70] = n1[i] + n2[i];        //把结果标准化        //乘法&加法        for (i = 139;i >= 0;i--)        {            if (en[i] >= 10000)            {                en[i - 1] += (long long)(en[i] / 10000);                en[i] = en[i] % 10000;            }        }        //打印结果        pr(en,140);    }    return 0;}void hs(char *s,long long *n){    char *ps = s + strlen(s) - 1;    char *tmp = NULL;    long long *pn = &n[69];    long long tim = 3;    while (ps >= s)    {        if ((ps - 3) >= s)        {            while(tim >= 0)            {                *pn = (*pn) * 10 + (*(ps - tim) - '0');                tim--;            }            pn--;            tim = 3;        }else        {            tmp = s;            while (tmp <= ps)            {                *pn = *pn * 10 + (*tmp - '0');                tmp++;            }        }        ps -= 4;    }}void pr(long long *n,int num){    long long *p = n;    while (*p == 0)        p++;    //第一个数一定要特殊处理    if (p > &n[num - 1])    {        printf ("0\n");    }    else    {        printf ("%lld",*p);        p++;        while (p <= &n[num - 1])        {            printf ("%04lld",*p);            p++;        }        printf ("\n");    }}


 

0 0
原创粉丝点击