문제접근
•
일의 자리부터 더해가면서 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++
복사