DY N DY

실력키우기 각 자릿수의 합(C++) 본문

PARK/ALGORITHM

실력키우기 각 자릿수의 합(C++)

손세지 2016. 4. 7. 00:48

2812 : 각 자리수의 합

제한시간: 1Sec    메모리제한: 128mb
해결횟수: 619회    시도횟수: 1569회   



자연수 N을 입력받아서 각 자리수의 합이 한자리가 될 때까지 그 합을 출력하는 프로그램을 작성하시오.


※ int형 변수로는 232-1 까지 입력받을 수 있다.

 

양의 정수 N을 입력받는다. (1 ≤ N ≤ 263-1)



첫 번째 줄에 입력받은 수의 각 자리수의 합을 출력한다.
출력한 수가 10 이상이면 그 수의 각 자리수의 합을 다음줄에 출력한다.
출력한 수가 10 미만이 될 때까지 반복하여 출력한다.


 [Copy]
1234567891
 [Copy]
46
10
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**************************************************************
    Problem: 2812
    User: a132034
    Language: C++
    Result: Success
    Time:0 ms
    Memory:1740 kb
****************************************************************/
 
 
#include    <iostream>
using namespace std;
 
int main()
{
    long long in;
    const long long c = 1000000000000000000;
    int res = 0;
    long long tmpC = c;
    cin >> in;
    while (1)
    {
        res += in / tmpC;
        in -= in / tmpC * tmpC;
        if (tmpC == 1)
        {
            cout << res << endl;
            if (res < 10)
            {
                break;
            }
            in = res;
            res = 0;
            tmpC = c;
        }
 
        tmpC /= 10;
    }
 
    return 0;
}


int형 변수로는 한계가 있기 때문에 long long 타입을 사용했다. 

사실 저 c는 가변적으로 전처리를 통해 얻어낼 수 있지만 여기선 그정도까지는 필요 없다고 판단해서 상수로 집어넣었다. 

그외 특별히 어려운 점은 없고 나누어 주며 몫을 res 변수에 넣고 10 이하가 될 때 까지 반복한다. 


'PARK > ALGORITHM' 카테고리의 다른 글

알고리즘 색종이만들기(C++)  (0) 2016.04.11
실력키우기 소수구하기(C++)  (0) 2016.04.10
실력키우기 그릇(JAVA)  (0) 2016.04.06
실력키우기 윤년(C)  (0) 2016.04.06
실력키우기 이진수(C++)  (0) 2016.04.05