424 - Integer Inquiry

2689 단어 IntegeruvaInquiry424
주제: 대수 덧셈.
사고방식: 먼저 모든 숫자 를 오른쪽으로 정렬 하고 왼쪽 에 부족 한 부분 은 0 을 보충 한 다음 에 일반 덧셈 에 따라 계산 하면 된다.
요점: 사용 sprintf 에서 int 를 char [] 로 전환 합 니 다.
제목:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=97&page=show_problem&problem=365
코드:
# include <iostream>
# include <string>
# include <cstdio>
# include <cstring>
# include <vector>
# include <algorithm>
# include <cctype>
# include <iterator>
using namespace std;

// sprintf   int   char[]

//      , lines             
string sumBigInt(const vector<string>& lines, const int maxSize){
  string result = "";
  int carry = 0;                //   

  for(int i=maxSize-1; i>=0; i--){
    int sum = carry;

    for(int j=0; j<lines.size(); j++){
      char c = lines[j][i];

      sum += atoi(&c);
    }

    //     ,          
    if( i == 0){
      char a[10];
      sprintf(a, "%d", sum);
      result = a + result;
      break;
    }

    //          
    char a[2];
    sprintf(a, "%d", sum % 10);
    result = a + result;

    //     
    carry = sum / 10;
  }

  return result;
}

//    ,       line         ,      ,     0
void alignRight(vector<string>& lines, const int maxSize){
  for(int i=0; i<lines.size(); i++){
    
    if (lines[i].size() < maxSize) {
      string longer(maxSize, '0');

      copy(lines[i].begin(), lines[i].end(), 
         longer.begin() + (maxSize - lines[i].size()) );

      lines[i] = longer;
    }
  }

}

int main(int argc, char const *argv[])
{
  #ifndef ONLINE_JUDGE
    freopen ("424_i.txt", "r", stdin);  
    freopen ("424_o.txt", "w", stdout); 
  #endif
  
  vector<string> lines;
  int maxSize = 0;
  string line;

  getline(cin, line);
  while ( (!cin.eof()) && line != "0" ) {
    maxSize = line.size() > maxSize ? line.size() : maxSize;

    lines.push_back(line);
    getline(cin, line);
  }

  alignRight(lines, maxSize);
  cout << sumBigInt(lines, maxSize) << endl;    //          endl     WA
  
  return 0;
}

환경: C++ 4.5.3 - GNU C++ Compiler with options: -lm -lcrypt -O2 -pipe -DONLINE_JUDGE

좋은 웹페이지 즐겨찾기