C++/백준

[C++] 백준) 1357번 뒤집힌 덧셈 / int 뒤집는 함수

S_Hoon 2020. 8. 23. 00:23

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;
}

과하게 쉬운 문제