Search
Duplicate
📕

A+B

주차
문제번호
26711
언어
C++
티어
브론즈
유형
수학
사칙연산
큰 수 연산
nj_Blog
nj_상태
이해도
33%
풀이
사람
이해도 2
13 more properties

문제접근

일의 자리부터 더해가면서 10이 넘는 경우 저장을 해뒀다가 다음 자리수 연산에 사용

놓쳤던 부분

훨씬 간단하게 가능
string bigNumAdd(string n1, string n2) { int sum = 0; string result; //1의 자리부터 더하기 while (n1.empty() == false || n2.empty() == false || sum) { if (n1.empty() == false) { sum += n1.back() - '0'; n1.pop_back(); } if (n2.empty() == false) { sum += n2.back() - '0'; n2.pop_back(); } result.push_back((sum % 10) + '0'); sum /= 10; } //역순이므로 다시 역순 reverse(result.begin(), result.end()); return result; }
C
복사

코드

2160 KB

0 ms

#include <iostream> #include <string> #include <algorithm> using namespace std; int main(void) { string a, b; string answer = ""; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> a >> b; int indexA = a.size() - 1; int indexB = b.size() - 1; int upFlag = 0; while (indexA >= 0 && indexB >= 0) { int numA = a[indexA] - '0'; int numB = b[indexB] - '0'; int tmp = numA + numB + upFlag; if (tmp >= 10) upFlag = tmp / 10; else upFlag = 0; answer += to_string(tmp % 10); indexA--; indexB--; } while (indexA >= 0) { int numA = a[indexA] - '0'; int tmp = numA + upFlag; if (tmp >= 10) upFlag = tmp / 10; else upFlag = 0; answer += to_string(tmp % 10); indexA--; } while (indexB >= 0) { int numB = b[indexB] - '0'; int tmp = numB + upFlag; if (tmp >= 10) upFlag = tmp / 10; else upFlag = 0; answer += to_string(tmp % 10); indexB--; } if (upFlag > 0) answer += to_string(upFlag); reverse(answer.begin(), answer.end()); cout << answer; return (0); }
C++
복사