zoukankan      html  css  js  c++  java
  • A+B again

     

     

    题目描述

    谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。

    输入

    输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。

    输出

    对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。

    样例输入

    2

    2

    112233445566778899 998877665544332211

    样例输出

    Case 1: 1 + 2 = 3

    Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110

    提示

     

    大数加法问题,在大数运算里面相对还算简单,不过对初学者博主来说,思路清晰,不过写代码能力明显就有点跟不上了。

    下面我们来分析下吧:

         前面的Case什么的只要把相应已知数据输出即可,下面我们重点来分析下加法的结果

        

           首先我们看他的输入,是连续输入,即这个大数字各个位之间是没有空格的,这就意味着用整型的数组难以实现数据的输入问题。因此我们考虑用字符型数组解决输入问题。

           这里方便起见;我们输入字符数组a为“98”,b为“9”  来分析下思路。

           原理就是模拟小学加法,要做加法,首先每位数字应对齐,才可对应相加。因此,我们考虑定义字符数组 char c[1001]来转移并对齐a,b中的元素;

                                  cin>>a;  "98"

    代码如下:

    
    

     

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    char a[1001],b[1001];
    
    void Add()//字符加法 
    {
        
        char c[1001];
        memset(c,'0',1001);
        for(int i=0;i<strlen(a);i++)//对齐 
        {
            c[i]=a[strlen(a)-1-i];
        }
        
        
        memset(a,'0',1001);
        for(int i=0;i<strlen(b);i++)
        {
            a[i]=b[strlen(b)-1-i];
        }
        
        for(int i=0;i<1000;i++)
        {
            a[i]+=c[i]-'0';
            if(a[i]>'9')
            {
                a[i]-=10;
                a[i+1]++; 
            }
        }
        
    }
    
    
    int main()
    {
        int T,n=0;
        cin>>T;
        while(T--)
      {
          n++;
        memset(a,'0',1001);
        memset(b,'0',1001);
        
        cin>>a>>b;
        
        cout<<"Case "<<n<<":"<<endl; 
        cout<<a<<" + "<<b<<" = ";
        
        
        Add();
        
        int k;
        for(k=1000;k>=0;k--)//排前导0 
        {
            if(a[k]!='0')
            {break;}
        }
        for(int i=k;i>=0;i--)
        {
            cout<<a[i];
        }
        cout<<endl;
       }
        return 0;
     } 

     

     

    转载请注明出处,谢谢.Q_Q
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
  • 原文地址:https://www.cnblogs.com/dearvee/p/5562057.html
Copyright © 2011-2022 走看看