程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 【NEUQACM OJ】1018: A+B again,neuqacmoj

【NEUQACM OJ】1018: A+B again,neuqacmoj

編輯:C++入門知識

【NEUQACM OJ】1018: A+B again,neuqacmoj


1018: A+B again

 

題目描述

谷學長有一個非常簡單的問題給你,給你兩個整數A和B,你的任務是計算A+B。

輸入

輸入的第一行包含一個整數T(T<=20)表示測試實例的個數,然後2*T行,分別表示A和B兩個正整數。注意整數非常大,那意味著你不能用32位整數來處理。你可以確定的是整數的長度不超過1000。

輸出

對於每一個樣例,你應該輸出兩行,第一行是"Case #:",#表示第幾個樣例,第二行是一個等式"A+B=Sum",Sum表示A+B的結果。注意等式中有空格。

樣例輸入

2
1
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"

代碼如下:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 char a[1001],b[1001];
 6 
 7 void Add()//字符加法 
 8 {
 9     
10     char c[1001];
11     memset(c,'0',1001);
12     for(int i=0;i<strlen(a);i++)//對齊 
13     {
14         c[i]=a[strlen(a)-1-i];
15     }
16     
17     
18     memset(a,'0',1001);
19     for(int i=0;i<strlen(b);i++)
20     {
21         a[i]=b[strlen(b)-1-i];
22     }
23     
24     for(int i=0;i<1000;i++)
25     {
26         a[i]+=c[i]-'0';
27         if(a[i]>'9')
28         {
29             a[i]-=10;
30             a[i+1]++; 
31         }
32     }
33     
34 }
35 
36 
37 int main()
38 {
39     int T,n=0;
40     cin>>T;
41     while(T--)
42   {
43       n++;
44     memset(a,'0',1001);
45     memset(b,'0',1001);
46     
47     cin>>a>>b;
48     
49     cout<<"Case "<<n<<":"<<endl; 
50     cout<<a<<" + "<<b<<" = ";
51     
52     
53     Add();
54     
55     int k;
56     for(k=1000;k>=0;k--)//排前導0 
57     {
58         if(a[k]!='0')
59         {break;}
60     }
61     for(int i=k;i>=0;i--)
62     {
63         cout<<a[i];
64     }
65     cout<<endl;
66    }
67     return 0;
68  } 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved