Algorithm/백준

[C][백준] 1357번 뒤집힌 덧셈 풀이 : 문자열, 배열을 쓰지 않고, C 숫자 분리

이무기뱀술 2022. 9. 29. 21:39
728x90

뒤집힌 덧셈.

학생들이 반복문을 배웠을 때 이 문제를 풀어야한다더라

 

처음에는 배열을 이용하여 풀었..지만

아뿔싸!

커리큘럼상 반복문을 배우고 나서 배열과 문자열을 배운다.

 

어떻게 하면 반복문과 조건문만을 가지고 이 문제를 풀 수 있을까??

이 2가지를 잘 생각하면 문제를 풀 수 있다.

 

1. 주어지는 수는 1000 보다 작거나 같다.

2. 수에서 숫자 분리하는 방법.

// 수에서 숫자 하나씩 분리
int num = 123;

while(num)
{
    printf("%d", num % 10);
    num /= 10;
}

// 출력결과: 321

수를 10으로 나눈 나머지를 출력하고 수를 10으로 나누면 수를 숫자 하나하나씩 분리할 수 있다. 

 

풀이:

// 문자열, 배열을 사용하지 않고, 반복문, 조건문만 사용해서 풀 것.

#include <stdio.h>

int main()
{
    int num1, num2, res;
    int r1 = 0, r2 = 0, r3 = 0;
    scanf("%d %d", &num1, &num2);

    for (int i = 1000; i > 0; i /= 10) // 1000부터 1까지 반복
    {
        if (num1 / i != 0) // 나누었을 때 0이 되면(자리수 보다 i가 크면) 실행 안 함.
        {
            r1 += (num1 % 10) * i; // 원래 수로 복원하여 r1에 저장
            num1 /= 10;            // 그 다음 자리수 구하기
        }

        if (num2 / i != 0)
        {
            r2 += (num2 % 10) * i;
            num2 /= 10;
        }
    }

    res = r1 + r2;
    for (int i = 1000; i > 0; i /= 10) // 결과도 같은 방식으로 출력
    {
        if (res / i != 0)
        {
            r3 += (res % 10) * i;
            res /= 10;
        }
    }

    printf("%d", r3);
    return 0;
}
728x90