알고리즘 모음(C++)

백준 1357 - 뒤집힌 뎃셈(C++) 본문

백준

백준 1357 - 뒤집힌 뎃셈(C++)

공대생의 잡다한 사전 2023. 5. 18. 23:30

문제 링크입니다. https://www.acmicpc.net/problem/1357

 

1357번: 뒤집힌 덧셈

어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev(

www.acmicpc.net

수를 한번 뒤집고 더한 뒤, 더한 값을 다시 뒤집어 출력하는 문제입니다.

 

입력받은 수는 string 형으로 만들어, reverse() 함수를 통해 쉽게 바꿀 수 있도록 합니다.

뒤집은 수를 정수형 변수로 바꿔준 뒤, 더해줍니다.

 

마지막으로 더해준 수를 뒤집어줘야 합니다.

54321을 예로 들면, 12345로 바꿔줘야합니다.

 

54321를 10으로 나눈 나머지인 1을 더해준 뒤, 54321를 10으로 나눠줘 5432로 만들어줍니다.

다음으로 1을 10을 곱해줘 10으로 만든 뒤, 54321의 10으로 나눈 나머지를 더해줘 12로 만들어 줍니다.

이를 반복하면 됩니다.

 

자세한 것은 코드를 참고해주세요.

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

string x, y;
int X, Y, sum, reverse_sum;

void Reverse(){
    while(1){
        if(sum == 0) break;
        reverse_sum *= 10;
        reverse_sum += (sum%10);
        sum /= 10;
    }
}

void solve(){
    reverse(x.begin(), x.end());
    reverse(y.begin(), y.end());
    for(int i = 0; i < x.size(); i++){
        X *= 10;
        X += (x[i] - '0');
    }
    for(int i = 0; i < y.size(); i++){
        Y *= 10;
        Y += (y[i] - '0');
    }
    sum = X + Y;
    Reverse();
    cout << reverse_sum;
}

int main(){
    cin.tie(0);
    cout.tie(0);
    cin >> x >> y;
    solve();
    return 0;
}

 

 

질문 및 조언은 댓글을 참고해주세요.

'백준' 카테고리의 다른 글

백준 10822 - 더하기(C++)  (0) 2023.05.28
백준 2902 - KMP는 왜 KMP일까?(C++)  (0) 2023.05.20
백준 4470 - 줄번호(C++)  (0) 2023.05.18
백준 10821 - 정수의 개수(C++)  (0) 2023.05.18
백준 11098 - 첼시를 도와줘!(C++)  (0) 2023.05.18