https://www.acmicpc.net/problem/1357
1357번: 뒤집힌 덧셈
어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(
www.acmicpc.net
문제
어떤 수 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보다 작거나 같은 자연수이다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력 1 복사
123 100
예제 출력 1 복사
223
쉽게 말해서
154와 112가 있다고 가정하면
154 = 451
+
112 = 211
=
662 = 266
두 숫자를 입력하고 둘다 뒤집는다.
그 상태에서 두 수를 더하고 더한 값 또한 뒤집는다.
int 뒤집기 함수
int intSwap(int& a) { // 함수선언
int remainder = 0; // 나머지
int reversed = 0; // 뒤집은 값
while(a != 0) {
reaminder = a % 10; // a를 10으로 나눈 나머지를 저장. ex) 112라면 2를 저장한다.
reversed = reversed * 10 + remainder; // 2를 reversed에 넣고 다음턴에 2에 10을 곱하고 1을 더해서 21을 만든다.
a /= 10; // reversed에 넣은 나머지는 이제 필요없으므로 10으로 나누어 112에 2를 저장했다면 11을 남긴다.
}
a = reversed; // 그냥 return reversed라고 해도 좋지만 그냥 맘에 안들어서 이렇게 함
return a;
}
최종 코드
#include <iostream>
int intSwap(int& a) {
int remainder = 0;
int reversedNumber = 0;
while(a != 0) {
remainder = a % 10;
reversedNumber = reversedNumber * 10 + remainder;
a /= 10;
}
a = reversedNumber;
return a;
}
int main() {
int A, B;
int result = 0; // A + B를 저장하기 위한 변수선언
std::cin >> A >> B; // 두 수를 입력
intSwap(A);
intSwap(B);
result = A + B;
std::cout << intSwap(result) << std::endl; // result를 뒤집은 것을 출력
return 0;
}
과하게 쉬운 문제
'C++ > 백준' 카테고리의 다른 글
[C++] 백준) 2033번 반올림 문제풀이 (0) | 2020.08.25 |
---|---|
[C++] 백준) 1977번 완전제곱수 문제풀이 (0) | 2020.08.25 |
[C++] 백준) 1526번 가장 큰 금민수 문제풀이 (0) | 2020.08.24 |
[C++] 백준) 1356번 유진수 문제풀이 (0) | 2020.08.23 |
[C++] 백준) 1259번 팰린드롬수 문제풀이 (0) | 2020.08.23 |