數組實現大數四則運算

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[]計算完畢後要進行進位運算纔可以正常以十進制展示結果

除法運算:
目前只做了大數除以小整數。。。先不寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章