카테고리 없음

백준 10757_큰 수 A+B

oose. 2024. 6. 28. 18:34

 

#include <iostream>
#include <vector>
using namespace std;

int charToint(char ch){ //문자열을 정수로 변환
  return (ch - '0');
}

vector<int> calcPlus(string &a, string &b){ //계산  결과 반환 
  int idx_a = a.size()-1; //일의 자리부터 계산하기 위해 인덱스 생성
  int idx_b = b.size()-1;
  bool carry = false;

  vector<int> ans;

  while(idx_a>=0 && idx_b>=0){ //일의 자리끼리 계산
    int num = charToint(a[idx_a--])+charToint(b[idx_b--]);
    num += carry; //bool 타입이므로 0 또는 1 이 더해짐
    carry = num/10; //십의 자리 올림 발생 여부 확인
    ans.push_back(num%10);
  }

  while(idx_a >= 0){ //자릿수가 남았을 때
    int num = charToint(a[idx_a--]); 

    num+= carry;
    carry = num/10;
    ans.push_back(num%10);
  }
  if(carry){ //올림수가 남았을 때
    ans.push_back(1);
  }
  return ans;
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(NULL);

  string a, b;
  vector<int> ans;

  cin >> a >> b;

  if(a.length()<b.length()){ //자릿수가 더 큰 걸 앞의 파라미터에 넣어주기 위해
    swap(a, b);
  }
  ans = calcPlus(a, b);
  while(!ans.empty()){ 
    cout << ans.back(); //뒤에서부터 출력한다.
    ans.pop_back(); //출력후에는 pop
  }
}