A+B again

 

 

题目描述ios

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

输入测试

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

输出code

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

样例输入ci

2 string

2io

112233445566778899 998877665544332211class

样例输出

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;
 } 

 

 

相关文章
相关标签/搜索