반응형
큰 수 A + B 문제.
10000자리 이상의 큰 수에 대한 덧셈에서, C/C++에선 어떻게 처리할 수 있을지에 대한 방법이다.
문자열로 값을 받아서 다뤄주면 된다.
풀고 나서 다른 분들의 풀이를 참고해봤더니, 비슷한 방식이였다.
결국 마지막 올림수(맨 앞자리 올림수) 여부에 대한 처리로 if 문을 넣어주는 방식은 동일했다.
세 배열 모두 char로 선언하신 분들도 많았는데, 그런 방식으로도 가능하겠다.
// 다 내 코드처럼 올림수에대한 분기문은 마지막에 작성하고있고(if부분), 구분 방법이 나랑은 조금 다를뿐.
#include <stdio.h>
#include <string.h>
char a[10001];
char b[10001];
int ans[10001]; // 덧셈값을 쉽게 저장하기 위해서, 그리고 올림값을 잘 처리하기 위해서 int로 선언. 기존 값(=올림결과값 0 or 1) + 덧셈값 = 저장값.
int a_len, b_len;
int main() {
scanf("%s %s", a, b);
a_len = strlen(a) - 1;
b_len = strlen(b) - 1;
int x, y, temp, c = 0;
// 두 값의 인덱스 모두가 음수가 될때까지 진행하며, 먼저 음수가 된 인덱스가 있다면 해당 값은 0으로 덧셈 진행.
// 두 수의 덧셈은 일의자리부터인 배열 끝에서부터 시행하나, 저장시에는 앞에서부터 저장한 뒤 뒤에서부터 출력하여 결과를 얻어냄.
while(a_len >=0 || b_len >=0) {
x = (a_len>=0)?(a[a_len]-'0'):0;
y = (b_len>=0)?(b[b_len]-'0'):0;
temp = ans[c] + x + y; // 올림값이 없다면 0 + x + y가 되고, 있다면 올림값 + x + y가 되는것.
ans[c] = temp%10;
ans[c + 1] = temp/10;
c++;
a_len--;
b_len--;
}
// 마지막 덧셈=맨 앞자리 덧셈의 올림여부에 대한 처리.
if(ans[c] == 0)
c--;
// 뒤에서부터 출력.
for(;c>=0;c--)
printf("%d", ans[c]);
}
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 1912번 | 복습 1회 완료 (0) | 2021.02.01 |
---|---|
[BaekJoon/백준] 11653번 (0) | 2021.01.30 |
[BaekJoon/백준] 9184번 | 복습 1회 완료 (0) | 2021.01.13 |
[BaekJoon/백준] 9251번 | 복습 1회 완료 (★) (0) | 2021.01.08 |
[BaekJoon/백준] 2565번 | 복습 1회 완료 (0) | 2021.01.06 |