• 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
  • 相关阅读:
    Android实现简单的检测手机自由落体关闭屏幕
    Android Disable Package/Component 跳过app安装
    求单向链表中倒数第k个节点(c++):快慢指针/递归
    算法学习笔记---链表与数组
    pycharm使用matplotlib绘图学习笔记
    pycharm使用matplotlib绘制图像报错
    python numpy学习笔记
    python刷leetcode算法-- 左旋转字符串
    机器学习算法扫盲篇
    Kaggle入门篇
  • 原文地址:https://www.cnblogs.com/dearvee/p/5562057.html
Copyright © 2020-2023  润新知