두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
첫째 줄에 A+B를 출력한다.
#include <iostream>
#include <string.h>
using namespace std;
int main() {
string A, B, tmp; // 0 < A, B < 10^10000
char C[10000]; // 마지막 배열은 null
bool carry = 0; // adder의 carry
cin >> A >> B;
// A를 긴자리 숫자로
if(A.length() < B.length()) {
tmp = A;
A = B;
B = tmp;
}
// LD: Long Digit, 긴 숫자 자리수
// SD: Short Digit, 짧은 숫자 자리수
int LD = A.length();
int SD = B.length();
// 마지막에 string으로 출력해주기 위해 null추가
C[LD] = '\0';
for(int i = 1; i <= LD; i++) {
if(i <= SD) { // 짧은 숫자 + 긴 숫자
C[LD - i] = ((A[LD - i] - '0') + (B[SD - i] - '0') + carry) % 10 + '0';
if((A[LD - i] - '0') + (B[SD - i] - '0') + carry >= 10) carry = 1;
else carry = 0;
} else { // 더이상 더할 짧은 숫자가 없을 때
if((A[LD - i] - '0') + carry < 10) {
C[LD - i] = A[LD - i] + carry;
carry = 0;
} else {
C[LD - i] = ((A[LD - i] - '0') + carry) % 10 + '0';
carry = 1;
}
}
}
if(carry == 1) printf("1"); // 최고 자리수 덧셈이 10을 넘어갔을 때
printf("%s\n", C);
}
숫자가 너무 큰 숫자(0 < A, B < 10^10000)였기 때문에, unsinged long long int 를 사용해도 풀 수가 없는 문제여서 char배열을 이용해 풀어야 했다.
최대 9999자리 숫자이므로 배열 C[10000]을 만들어 A + B를 char로 채웠다.
채운 방식은 A > B인 string을 만들고, 뒤에서부터 A[i], B[i]와 carry(덧셈에서 올림)를 더해 C[i]에 채워주었다.
(이 때, 위의 A[i]와 B[i]의 i는 자릿수가 다르면 다른 숫자이다)
만일 B는 최대 자리수까지 더했는데 A에 숫자가 남았다면 carry와 함께 C[i]를 채워줬다.
마지막에 carry가 1이 남을 경우 A의 최대 자리숫자에서 carry가 발생한 것이므로 1과 함께 C를 출력해주었고 아니면 그냥 C를 출력해주었다.