두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
(0 < A,B < 10^10000) 엄청나게 큰 수 이므로 long long, unsigned long long 을 사용해도 풀 수 없다.
이런 큰 수의 덧셈은 배열을 사용 하거나, 문자열을 사용해 풀 수 있다.
나는 문자열을 사용해 풀었다. A와 B를 문자열로 받고, 덧셈 결과를 문자열로 반환한다.
a가 큰 수이든 b가 큰 수 이든 상관없도록 아래와 같이 해주었다.
while (aSize > 0 || bSize > 0) {
int k1 = 0;
if(aSize>0){
k1 = a[--aSize] - '0';
}
int k2 = 0;
if (bSize > 0) {
k2 = b[--bSize] - '0';
}
}
아래는 AC를 받은 코드이다.
#include <iostream>
#include <string>
using namespace std;
// 10231435
// 231291
// --------
// 10462726
// 큰 수 덧셈
string big_integer(string& a, string& b) {
int aSize = a.length();
int bSize = b.length();
string rans = "";
int c = 0;
// 뒤에서 부터 계산
while (aSize > 0 || bSize > 0) {
int k1 = 0;
if(aSize>0){
k1 = a[--aSize] - '0';
}
int k2 = 0;
if (bSize > 0) {
k2 = b[--bSize] - '0';
}
int ret = k1 + k2 + c;
c = ret / 10;
ret %= 10;
char cur = ret + '0';
rans += cur;
}
if (c > 0) {
rans += c + '0';
}
string ans = "";
for (int i = (int)rans.length()-1; i >= 0; --i) {
ans += rans[i];
}
return ans;
}
int main(void) {
string a;
string b;
cin >> a;
cin >> b;
cout << big_integer(a, b) << "\n";
return 0;
}