양의 정수를 입력받아 역으로 보여주고 각 자리 숫자의 합을 구하는 프로그램을 작성하라.
21억 이하의 양의 정수를 입력받는다. 잘못된 데이터는 입력되지 않는다.
하나의 결과가 나온 후에도 계속 새로운 입력을 받다가 0이 입력되면 프로그램을 종료한다.
입력받은 수의 역과 각 자리 숫자의 합을 공백으로 구분하여 출력한다.유효하지않은 "0"은 출력하지 않는다.
입력받은 수의 역도 21억 이하의 정수이다.
[Copy]
453
123456
0 |
[Copy]
354 12
654321 21 |
이번 문제는 실력키우기 수학에서 첫번째 문제에 속하는 것인데 제가 못 보고 두번째 문제부터 시작했는지 오늘에야 발견했네요.
어쨋거나 첫 문제였던 만큼 쉽게 해결이 가능하긴 합니다.
그런데 조금 더 가독성을 향상시키고 싶은데 잘 안되네요.
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
43
44
45
46
47
48
49 |
#include <iostream>
using namespace std;
void PrintBackNumber(int n);
int main(void)
{
int n;
// 계속 입력받으며 처리한다.
while (true)
{
cin >> n;
// 0이 입력되는 경우 종료한다.
if (n == 0)
break;
PrintBackNumber(n);
}
}
void PrintBackNumber(int n)
{
// 수의 역을 저장할 변수
int backNum = 0;
// 수의 자리수의 합을 저장할 변수
int sum = 0;
// 각 자리의 숫자를 확인하기 위한 변수
int separateNum;
// 입력받은 수의 1의 자리를 확인한 뒤
// 10으로 나눠 다음 자리를 확인하는 것을 반복한다.
while (n != 0)
{
// n % 10이 여러번 불리니 저장 해 두고 사용한다.
separateNum = n % 10;
sum += separateNum;
backNum += separateNum;
// 다음 자리로 이동하기 위해 n을 10으로 나눈다.
n /= 10;
// 역수의 자리수를 증가시키기 위해 10을 곱한다.
// n이 0이되는 경우 더 이상 자리수를 증가시키면 안되기에 조건을 부여한다.
backNum *= (n!=0)?10:1;
}
cout << backNum << ' ' << sum << endl;
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 각 자리수의 역과 합