728x90
728x170
문제
어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(X) = 1이다.
두 양의 정수 X와 Y가 주어졌을 때, Rev(Rev(X) + Rev(Y))를 구하는 프로그램을 작성하시오
입력
첫째 줄에 수 X와 Y가 주어진다. X와 Y는 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력
123 100 |
예제 출력
223 |
힌트
출처
· 문제를 번역한 사람: baekjoon
알고리즘 분류
· 수학
코드
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 |
#include <iostream>
using namespace std;
int Rev(int n)
{
int a, b, c, d, rev = 0;
if (n >= 1000) { // (!)
a = n / 1000; // 1000의 자리수
b = (n - 1000 * a) / 100; // 100의 자리수
c = (n - 1000 * a - 100 * b) / 10; // 10의 자리수
d = n % 10; // 1의 자리수
rev = 1000 * d + 100 * c + 10 * b + a;
}
else if ((n >= 100) && (n <= 999)) {
a = n / 100; // 100의 자리수
b = (n - 100 * a) / 10; // 10의 자리수
c = n % 10; // 1의 자리수
rev = 100 * c + 10 * b + a;
}
else if ((n >= 10) && (n <= 99)) {
a = n / 10; // 10의 자리수
b = n % 10; // 1의 자리수
rev = 10 * b + a;
}
else if ((n >= 1) && (n <= 9)) {
a = n % 10; // 1의 자리수
rev = a;
}
return rev;
}
int main()
{
int X, Y, result;
cin >> X >> Y;
cout << Rev(Rev(X) + Rev(Y)) << endl;
return 0;
} |
cs |
- 999 999 입력 후 결과값이 8991이 출력되어야 한다.
- 문제에서는 X와 Y는 1,000보다 작거나 같은 수라는 조건이 있지만, Rev(X)값과 Rev(Y)값의 합이 1,000이 넘을 수 있음을 고려하여 알고리즘을 짜야 한다.
- 아마 대부분 이 부분을 간과하고 코드를 작성해서 틀리지 않을까 싶다.
728x90
그리드형(광고전용)
'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글
[BOJ2441][C++] 별찍기 - 4 (0) | 2017.11.09 |
---|---|
[BOJ2440][C++] 별찍기 - 3 (0) | 2017.11.09 |
[BOJ2439][C++] 별찍기 - 2 (0) | 2017.11.09 |
[BOJ2348][C++] 별찍기 - 1 (0) | 2017.11.09 |
[BOJ11050][C++] 이항 계수 1 (0) | 2017.11.08 |
[BOJ1676][C++] 팩토리얼 0의 개수 (0) | 2017.11.08 |
[BOJ11004][C++] K번째 수 : 오름차순 정렬 (0) | 2017.11.08 |
[BOJ10872][C++] 팩토리얼 (0) | 2017.11.08 |