티스토리 뷰

728x90

문제 링크

www.acmicpc.net/problem/5893

 

5893번: 17배

첫째 줄에 이진수 N이 주어진다. N은 최대 1000자리인 이진수이며, 0이 들어오는 경우는 없다.

www.acmicpc.net

 

풀이

17 = 10001(2) 입니다.

입력받은 이진수를 왼쪽 4칸 쉬프트 해주고, 다시 그 이진수와 더해주면 17을 곱해준 것과 같습니다.

범위가 크니까 큰 수 덧셈을 구현해줍시다.

 

 

정답 코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    string u, v, ans;
    cin >> u;
    v = u;
    u += "0000";
    int c = 0;
    while (!v.empty()) {
        int val = u.back() + v.back() - 48 * 2 + c;
        c = val / 2;
        ans += to_string(val % 2);
        u.pop_back();
        v.pop_back();
    }
    while (!u.empty()) {
        int val = u.back() - 48 + c;
        c = val / 2;
        ans += to_string(val % 2);
        u.pop_back();
    }
    if (c) ans += "1";
    reverse(all(ans));
    cout << ans;
}
728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 2618 - 경찰차  (0) 2021.03.13
[BOJ] 백준 1006 - 습격자 초라기  (0) 2021.03.13
[BOJ] 백준 1014 - 컨닝  (0) 2021.03.11
[BOJ] 백준 1256 사전  (0) 2021.03.10
[BOJ] 백준 5582 공통 부분 문자열  (0) 2021.03.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함