풀이
10의 10000승이므로 개행문자 까지 포함해 A, B에는 최대 10002개의 문자가, 두 수의 합을 저장할 배열은 최대 10003개의 문자를 담을 수 있어야 한다.
문자열로 입력받았기 때문에 자리올림을 위해 문자열을 뒤집어 주어야 한다.
백준 채점 환경에서는 strrev()를 사용할 수 없어 직접 구현했다.
두 문자열의 문자에 해당하는 아스키코드값을 이용해 덧셈을 해주며, 자리올림이 발생하면 다음 계산 때 적용한다.
소스코드
#include <stdio.h>
#include <string.h>
void str_rev(char *str, int len){
for (int i = 0; i < len/2; i++){
str[i] = str[i] ^ str[len-i-1];
str[len-i-1] = str[len-i-1] ^ str[i];
str[i] = str[i] ^ str[len-i-1];
}
}
int main(){
char A[10002] = {0,}, B[10002] = {0,}, C[10003] = {0,};
scanf("%s %s", A, B);
int lenA = strlen(A), lenB = strlen(B);
str_rev(A, lenA);
str_rev(B, lenB);
int carry = 0, len = lenA > lenB ? lenA : lenB;
for (int i = 0; i < len; i++){
int num = A[i] + B[i]- '0'*2 + carry;
while (num < 0) num += '0';
C[i] = num%10 + '0';
carry = (num > 9 ? 1 : 0);
}
carry && (C[len] = '1');
str_rev(C, strlen(C));
printf("%s", C);
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 7287] 등록 [C] (0) | 2021.07.31 |
---|---|
[백준 2558] A + B - 2 [C] (0) | 2021.07.31 |
[백준 10870] 피보나치 수 5 [C] (0) | 2021.07.31 |
[백준 2748] 피보나치 수 2 [C] (0) | 2021.07.31 |
[백준 2747] 피보나치 수 [C] (0) | 2021.07.31 |