zoukankan      html  css  js  c++  java
  • 高精度(正整数的加、减、乘法)

    #include<iostream>
    #include<cstring>
    using namespace std;
    struct bignum
    {
        int len;
        int num[505];
        bignum()
        {
            memset(num,0,sizeof(num));
        }
    } a,b,c;
    int cmp(bignum a,bignum b)
    {
        if(a.len>b.len)return 1;
        if(a.len<b.len)return 0;
        for(int i=1; i<=a.len; i++)
        {
            if(a.num[i]>b.num[i])return 1;
        }
        return 0;
    }
    bignum bigMinus(bignum a,bignum b)
    {
        bignum c;
        int clen=a.len;
        for(int i=1; i<=a.len; i++)
        {
            c.num[i]=a.num[i]-b.num[i];
            if(c.num[i]<0)
            {
                c.num[i]+=10;
                a.num[i+1]--;
            }
        }
        while(c.num[clen]==0)clen--;
        c.len=clen;
        return c;
    }
    bignum bigAdd(bignum a,bignum b)
    {
        bignum c;
        int clen=a.len;
        for(int i=1; i<=a.len+1; i++)
        {
            c.num[i]=a.num[i]+b.num[i];
            if(c.num[i]>=10)
            {
                c.num[i]-=10;
                a.num[i+1]++;
            }
    
        }
        if(c.num[clen+1])clen++;
        c.len=clen;
        return c;
    }
    bignum bigMultiply(bignum a,bignum b)
    {
        bignum c;
        int clen=a.len+b.len-1;
        for(int i=1; i<=a.len; i++)
            for(int j=1; j<=b.len; j++)
            {
                c.num[i+j-1]+=a.num[i]*b.num[j];
                if(c.num[i+j-1]>=10)
                {
                    c.num[i+j]+=c.num[i+j-1]/10;
                    c.num[i+j-1]%=10;
                }
            }
        if(c.num[clen+1])clen++;
        c.len=clen;
        return c;
    }

    调用:

    int main()
    {
        string num1,num2;
        cin>>num1>>num2;
        a.len=num1.length();
        b.len=num2.length();
        for(int i=0; i<a.len; i++)
        {
            a.num[a.len-i]=num1[i]-'0';
        }
        for(int i=0; i<b.len; i++)
        {
            b.num[b.len-i]=num2[i]-'0';
        }
        if(cmp(a,b))
        {
            c=bigAdd(a,b);
        }
        else
        {
            c=bigAdd(b,a);
        }
    
    //    if(cmp(a,b)){
    //        c=bigMinus(a,b)
    //    }else{
    //        printf("-");
    //        c=bigMinus(b,a);
    //    }
    
    //    c=bigMultiply(a,b);
        for(int i=c.len; i>0; i--)
        {
            cout<<c.num[i];
        }
    }

      

  • 相关阅读:
    20165212第八周学习总结
    20165212第八周课上测试补做
    20165212实验二面向对象程序设计
    Titanic生存预测
    聚类算法数据生成器make_blobs
    k-means
    监督学习、无监督学习与半监督学习
    在线Latex公式编辑器
    西瓜书课后习题——第四章
    ML经典数据集
  • 原文地址:https://www.cnblogs.com/flipped/p/5005010.html
Copyright © 2011-2022 走看看