자연수 N을 입력받아서 각 자리수의 합이 한자리가 될 때까지 그 합을 출력하는 프로그램을 작성하시오.
※ int형 변수로는 231-1 까지 입력받을 수 있다.
양의 정수 N을 입력받는다. (1 ≤ N ≤ 263-1)
첫 번째 줄에 입력받은 수의 각 자리수의 합을 출력한다.
출력한 수가 10 이상이면 그 수의 각 자리수의 합을 다음줄에 출력한다.
출력한 수가 10 미만이 될 때까지 반복하여 출력한다.
[Copy]
1234567891 |
[Copy]
46
10
1 |
굉장히 간단한 문제인데, 사용하는 컴파일러가 달라서 추정해서 풀어야 하는 문제가 또 나왔네요.
현재 저는 Visual Studio를 사용하고 있는데, 체점의 경우 gcc로 이루어지다 보니 제 컴파일러는 제대로 출력해도 저쪽에서는 제대로 처리를 못 하는 경우가 발생하는데요, 이걸 처리하려면 gcc 기준으로 코딩을 해주고 보내야 되는군요.
물론 gcc 기준으로 하는 경우 자신 Visual Studio에서는 또 잘 안되기도 하네요.
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
42 |
#include <iostream>
using namespace std;
// 자릿수의 합을 리턴하는 함수
int SumChiper(unsigned long N);
// 출력을 시키는 함수
void PrintResult(unsigned long N);
int main(void)
{
// 양의 정수
unsigned long N;
cin >> N;
// 입력한 수의 자리수의 합을 출력한다.
// 10 미만이 될 때까지 반복한다.
PrintResult(N);
}
// 재귀적으로 자릿수의 합을 구한다.
// 10으로 나눈 나머지(1의 자리에 해당하는 수)를 구하고
// 10으로 나눈 몫(1의 자리에 해당하는 수를 제외한 수)를 다시 함수에 넣어
// 1의 자리가 될 때까지 반복한다.
int SumChiper(unsigned long N)
{
if (N / 10 == 0)
return N;
return N % 10 + SumChiper(N / 10);
}
void PrintResult(unsigned long N)
{
N = SumChiper(N);
cout << N << endl;
// 10 미만이 아닌경우 반복
if (N / 10 != 0)
PrintResult(N);
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 각 자리수의 합