zoukankan      html  css  js  c++  java
  • [蓝桥杯][基础练习VIP]高精度加法

    时间限制: 1Sec 内存限制: 128MB 提交: 279 解决: 88

    题目描述
    输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 

    算法描述 

    由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 

    定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 

    计算c  =  a  +  b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。 

    最后将C输出即可。 
    输入
    输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。 
    输出
    输出一行,表示a  +  b的值。 
    样例输入
    20100122201001221234567890 
    
    2010012220100122 
    样例输出
    20100122203011233454668012

    #include<iostream>
    #include<string>
    using namespace std;
    const int maxn = 101;
    int A[maxn],B[maxn],C[maxn];
    string a,b;
    int main(void)
    {
        cin>>a>>b;
        for(int i=0;i<a.length();i++) A[a.length()-i]=a[i]-'0';
        for(int i=0;i<b.length();i++) B[b.length()-i]=b[i]-'0';
        A[0]=a.length();  B[0]=b.length();
        //for(int i=a[0];i>=1;i--) cout<<A[i]; cout<<endl;
        //for(int i=b[0];i>=1;i--) cout<<B[i]; cout<<endl;
        C[0]=max(A[0],B[0]);
        for(int i=1;i<=C[0];i++) C[i]=A[i]+B[i];
        int g=0;
        for(int i=1;i<=C[0];i++)
        {
            C[i]+=g;
            g=C[i]/10;
            C[i]%=10;
        }
        while(g)
        {
            C[++C[0]]=g;
            g/=10;
        }
        //cout<<C[0]<<endl;
        for(int i=C[0];i>=1;i--) cout<<C[i];
        return 0;
    }
  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8934148.html
Copyright © 2011-2022 走看看