数组实现大数四则运算

来源:互联网 发布:dg加密软件 编辑:程序博客网 时间:2024/06/07 01:30

ACM中一些题涉及大数运算,而long long int或_int64 或许在本机可行,但在服务器上就不一定跑的通了

当然,办法是有的 。
今讲讲其中的数组实现:


大概思路:
用一个一维数组来存储一个大数,每个数组元素存储一个数位,在此基础上实现加减乘除四则运算

int chai(int a[],int x)//将大数x拆分倒着存入数组  例如123->a[0]=3,a[2]=1;{    int i=0;    while(x>=10)    {        a[i++]=x%10;        x/=10;    }    a[i]=x;    return i;//返回有效数字长度}

首先是最简单的加法:

void jia(int num[],int num_i,int b[],int b_i)//num代表的数加上b代表的数,num_i代表num的长度{    //默认mun_i>=b_i    int i=0;    for(i;i<=num_i;i++)//若num_i由函数chai()得来,则为i<=num_i        num[i]+=b[i];//一一相加    if(num[i]>=10) //进位运算    {        num[i+1]+=num[i]/10;        num[i]%=10;    }}

减法:

void jian(int num[],int num_i,int b[],int b_i)//num代表的数减去b代表的数{    //默认mun_i>=b_i    int i=0;    for(i;i<num_i;i++)        num[i]-=b[i];//一一相减    if(num[i]<0) //补位运算    {        num[i]+=10;        num[i+1]-=1;    }}

乘法运算:

void cheng(int a[],int a_i,int b[],int b_i,int num[])//a[],b[]相乘存到num[]{    //默认a_i>=b_i  其实无所谓    int i,j;    for(i=0;i<=a_i;i++)    {        for(j=0;j<=b_i;j++)        {            num[i+j]+=a[i]*b[j];//num[]初始化为0        }    }}//num[]计算完毕后要进行进位运算才可以正常以十进制展示结果

除法运算:
目前只做了大数除以小整数。。。先不写

0 0
原创粉丝点击