🧠 Algorithm/[C] BOJ

[C언어] 10757번 - 큰 수 A+B

0_ch4n 2022. 3. 31. 23:44
반응형

문제

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

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

코드

#include <stdio.h>
#include <string.h>

void reverse(char arr[]) { //배열을 뒤집기 위한 함수
    int len = strlen(arr) - 1; //배열의 길이 측정

    for(int i = 0; i < (len / 2) + 1; i++) { //맨 끝부터 서로 자리를 바꾸기 때문에 총 길이/2까지 반복
        char temp = arr[i];

        arr[i] = arr[len - i];
        arr[len - i] = temp;
    }
}

int main(void) {

    char num_a[100000];
    char num_b[100000];
    char num_sum[100000];
    int upper = 0;
    int len;
    int sum;

    scanf("%s %s", num_a, num_b); //두 숫자 입력
    
    reverse(num_a); //배열 뒤집기
    reverse(num_b); //배열 뒤집기

    if(strlen(num_a) > strlen(num_b)) { //길이가 긴 배열을 기준으로 반복하기 위해 찾기
        len = strlen(num_a);
    }
    else {
        len = strlen(num_b);
    }

    for(int i = 0; i < len; i++) { //배열 길이만큼 반복
        if(num_a[i] == '\0') { //a배열에 해당 값이 NULL이라면 b배열에 있는 숫자를 int형으로 바꾼 후 upper를 더한다
            sum = num_b[i] - '0' + upper;
        }
        else if(num_b[i] == '\0') { //b배열에 해당 값이 NULL이라면 a배열에 있는 숫자를 int형으로 바꾼 후 upper를 더한다
            sum = num_a[i] - '0' + upper;
        }
        else { //둘 다 NULL이 아니라면 두 숫자 다 int형으로 바꾼 후 upper와 함께 더한다
            sum = (num_a[i] - '0') + (num_b[i] - '0') + upper;
        }
        
        if(sum >= 10) { //최종적으로 값이 10 이상이라면 upper에 1을 저장
            upper = 1;
        }
        else {
            upper = 0;
        }

        num_sum[i] = (sum % 10) + '0'; //결과값 배열에 일의 자리 수를 char형으로 바꾼 뒤 저장
    }

    if(upper == 1) { //맨 마지막 자리 계산 후 남는 upper처리
        num_sum[len] = '1';
    }

    reverse(num_sum); //처음에 뒤집어서 계산했으니 다시 원복시킨다

    printf("%s", num_sum); //결과물 출력

    return 0;
}

 

반응형