본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 1040 자리올림 횟수 찾기

by 까망 하르방 2021. 3. 17.
반응형

출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=319&sca=50

Approach

9999 + 111 = 10110

→ 올림수 처리를 위해 "carry" 변수 이용 (초기값 = 0)

→ 좀 더 긴 자릿수에 맞추어 Leading Zero를 고려합니다. 9999 + 0111

1 + 9  + 0(= carry) = 10 → carry = 1

1 + 9  + 1(= carry) = 11 → carry = 1

1 + 9  + 1(= carry) = 11 → carry = 1

0 + 9  + 1(= carry) = 10 → carry = 1


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char A[11], B[11];
int answer;
int main() {
    // freopen("input.txt", "r", stdin);
     
    scanf("%s %s", A, B);
    int aLen = strlen(A);
    int bLen = strlen(B);
    int aIdx = aLen - 1, bIdx = bLen - 1;
    int a, b, carry = 0;
 
    while (aIdx >= 0 || bIdx >= 0) {
        if (aIdx < 0) a = 0;
        else a = A[aIdx--] - '0';
 
        if (bIdx < 0) b = 0;
        else b = B[bIdx--] - '0';
        
        if (a + b + carry >= 10) {
            carry = (a + b + carry) / 10;
            answer++;
        }
    }
    
    if(!answer) printf("No carry operation.");
    else if(answer == 1) printf("%d carry operation.", answer);
    else printf("%d carry operations.", answer);
}

 

반응형

댓글