---
# System prepended metadata

title: 7-4

---

# 7-4
題目描述
明明想要傳一組密碼給小智，可是他怕自己的密碼被有心人士竊取，所以他傳給小智的密碼是經過加工的一整行文字，真正的密碼為該行文字中的所有數字的總和(不須處理負數的情況)。
輸入說明
輸入為一行文字，可能包含空格。

輸出說明
輸出真正的密碼。

範例輸入
hello35 wo80rld100

範例輸出
215

```cpp=
#include <iostream>
using namespace std;
int main()
{
  string s;
  int sum=0, temp=0;
  getline(cin,s);
  s+=' ';
  for(int i=0;i<s.size();i++)
    if(isdigit(s.at(i)))
      temp = temp*10 + s.at(i)-48;
    else
    {
      sum+=temp;
      temp=0;
    }      
  cout<<sum<<endl;
  
  return 0;
}
```

# 7-5
題目描述
大部份程式語言受限於資料型態，無法直接精確顯示20位數以上的數值。但是這個問題，我們可以自行撰寫程式來處理。試設計一程式，可由使用者輸入兩數（最多100位數）後，輸出其相加的結果。
輸入說明
輸入兩個超長的正整數 A、B (不超過100位)。

輸出說明
請輸出 A+B 的值。

範例輸入
123456789012345678901234567890 111111111111111111111111111111

範例輸出
234567900123456790012345679001

```cpp=
//大數相加 
#include <iostream>
#include <cstring>   
using namespace std;

int num[20005];

int main()
{
  int i,j,lena,lenb;
  string a,b;

  while(cin>>a>>b)
  {
   lena=a.length();
   lenb=b.length();
   memset(num,0,sizeof(num));
   // 進行各個位數相加 
   for(i=lena-1; i>=0; i--) num[lena-i-1]+=(a[i]-48);
   for(i=lenb-1; i>=0; i--) num[lenb-i-1]+=(b[i]-48);
   
   for(i=0; i<20000; i++)
   {
     num[i+1]+=num[i]/10;  //處理進位 
     num[i]%=10;
   }
   // 輸出結果 
   for(i=19999; i>=0 && num[i]==0; i--);
   if(i<0) cout<<"0";
   for( ; i>=0; i--) cout<<num[i];
   cout<<endl;
  }
  return 0;
}

```