Baekjoon Online Judge
문제
어떤 수 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 |
111 111 | 222 |
5 5 | 1 |
1000 1 | 2 |
456 789 | 1461 |
풀이
#include <iostream>
#include <cmath>
using namespace std;
// 모든 자리수를 역순으로 만드는 함수
int Rev(int num) {
int rNum = 0;
int idx = 0; // num의 길이
int num1 = num;
// num 길이 구하기
for (int i = 0; ; i++) {
num1 /= 10;
idx++;
if (num1 == 0)
break;
}
// 숫자를 역순으로 바꾸기
for (int i = idx - 1; i >= 0; i--) {
rNum += num % 10 * pow(10, i);
num /= 10;
}
return rNum;
}
int main() {
int X, Y;
cin >> X >> Y;
// 출력
cout << Rev(Rev(X) + Rev(Y)) << endl;
return 0;
}
숫자를 역순으로 만드는 함수를 구현해야 하는 문제이다.
가장 먼저 함수가 실행되면 num이 몇 자리 숫자인지를 구한 뒤 idx에 저장했다. 그 뒤에 for문으로 입력 받은 숫자를 i10으로 나눈 나머지에 i만큼 제곱한 숫자를 곱한 뒤 서로 더하는 식으로 숫자를 역순으로 바꿨다.
여기서 i는 나중에 계산할 수록 작아져야 하므로 idx - 1이라는 숫자를 초깃값으로 사용했다. 또한 10의 0제곱이 계산할 때 필요하므로 i의 범위를 0까지 포함시켰다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 1371번 - 가장 많은 글자 (0) | 2022.05.21 |
---|---|
[Baekjoon/C++] 1362번 - 펫 (0) | 2022.05.21 |
[Baekjoon/C++] 1356번 - 유진수 (0) | 2022.05.21 |
[Baekjoon/C++] 1350번 - 진짜 공간 (0) | 2022.05.21 |
[Baekjoon/C++] 1333번 - 부재중 전화 (0) | 2022.05.21 |