• 被限制的加法(高精入门)


    题目:仅用不超过10个的变量,变成计算出两个等长的N(1<N<10^7)位正整数A,B(无前导0)相加的结果。

    输入格式:第一行一个数N,表示位数,后面有N行,每行两个数字,表示A、B相对位的两个数,输入的格式是从最高位开始到最低位。

    输出格式:输出两数的和

    输入样例:

    4

    1 1

    2 3

    0 5

    3 7

    输出样例:

    2560

    思路:由于内存的限制只能考虑从高位到低位的算法,即读一行数据就处理一行数据。

    显然,问题的关键是要解决进位引起的麻烦。由于只是两个数字相加,最多只会对上一位有进位1,而引发连续进位的只有一种情况:出现连续的9时后面出现了进位。如99 999+1。

    因此,可分三种情况处理:

      (1)当前计算的两个同位数的和sum<9时,前位计算的结果不会受以后进位的影响,则可以输出之前的计算结果。

      (2)当前计算的两个同位数的和sum=9时,则使用变量n9记录连续9的个数,这样可以处理以后可能的连续进位了。

      (3)当前计算的两个同位数的和sum>9时,引发高位的进位,则输出进位后的高位值,并将之前积累的连续n9个9以0输出

    #include<iostream>
    #include<cstdio> 
    using namespace std;
    int n,a,b,c,n9,sum,i,j;
    bool first;
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
        first=1;
        c=0;
        n9=0;//n9表示之前累积的9的个数
        for(i=1;i<=n;i++)//从高位开始,依次处理每一位 
        {
            cin>>a>>b;
            sum=a+b;
            if(sum<9)//无进位情况 
            {
                if(c>0||first==0)//避免前导零 
                  cout<<c;
                for(j=1;j<=n9;j++)//因为该位无进位,则可将之前积累的999...999 以000...000输出 
                  cout<<9;
                first=0;
                n9=0;//积累的999...999已输出,因此设为0 
                c=sum;
             } 
             else 
               if(sum==9)//为9时,只要记录9的个数 
                 n9++;
                else//大于9,即产生进位情况 
                {
                    c++;//进位后输出 
                    cout<<c;
                    for(j=1;j<=n9;j++)//因为进位,则将前面积累的999...999以000...000输出 
                      cout<<0;
                    first=0;
                    n9=0;c=sum-10; //c记录该位数进位后余下的数 
                }
        }
        
        cout<<c;
        for(j=1;j<=n9;j++)//处理剩下的一段999...999 
          cout<<9;
        return 0;
    }
  • 相关阅读:
    hdu 2586(最近公共祖先LCA)
    hdu 3394(点双连通)
    hdu 4005(边双连通)
    hdu 2460(tarjan求边双连通分量+LCA)
    【转载】8天学通MongoDB——第四天 索引操作
    【转载】8天学通MongoDB——第三天 细说高级操作
    [转载]MongoDB开发学习 经典入门
    【原创】jQuery 仿百度输入标签插件
    ★《唐琅探案》后记【2】
    ★《唐琅探案》后记【1】
  • 原文地址:https://www.cnblogs.com/thmyl/p/7359413.html
Copyright © 2020-2023  润新知