PS/Baekjoon Online Judge

[백준 10757] 큰 수 A+B [C]

kimyoungrok 2021. 7. 31. 22:13

백준 - 10757


풀이

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);
}

출처

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

'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