ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 2745번 진법 변환, 11005번 진법 변환 2
    문제 풀이 2020. 7. 20. 19:17

    2745 진법 변환


    문제


    B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

    10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

    A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35


    입력


    첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

    B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.


    출력


    첫째 줄에 B진법 수 N을 10진법으로 출력한다.



    풀이)

    string과 math 헤더를 사용하면 쉽게 풀 수 있는 문제였다.


    과정

    1. string을 이용해서 N을 입력받는다.

    2. N의 맨 오른쪽부터 10진수로 변환해준 값을 구한다.

        ( 만약, A~Z 의 알파벳이라면 A = 10, B = 11, ..., Z = 35 가 되게끔 바꿔준다.

     A는 아스키 코드 값으로 65, B는 아스키 코드 값으로 66,... 이러니깐 55를 빼면 된다.)

    3. 변환해준 값을 모두 더한뒤 출력


    코드)


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <math.h>
    using namespace std;
     
    int main() {
        string N;
        int B;
        cin >> N >> B;
        int tmp = 0, val =0;
        long long result = 0;
        for (int i = N.length()-1; i >=0; i--) {
            char c = N[i];
            if (c >= 'A' && c <= 'Z') val = c - 55;
            else val = c - '0';
            result += val * (int)pow((int)B, (int)tmp);
            tmp++;
        }
        printf("%lld", result);
        return 0;
    }
    cs




    11005 진법변환2


    문제


    10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

    10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

    A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35


    입력


    첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.


    출력


    첫째 줄에 10진법 수 N을 B진법으로 출력한다.



    풀이)

    진법변환 문제와 반대로 이번에 10진수를 B진수 값으로 바꾸는 문제였다.

    계속 몫과 나머지를 이용해서 풀면 된다.


    N이 0보다 클 때 까지

    1. N을 B로 나눈 나머지를 구한다.

       나머지가 10이상이면 알파벳으로 바꾼다. 나머지를 저장해둔다. (저장할 문자열의 가장 오른쪽에 저장)

    2. N을 B로 나눈다.


    코드)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <math.h>
    using namespace std;
     
    int main() {
        int N, B;
        cin >> N >> B;
        string s = "";
        while (N > 0)
        {
            int val = N % B;
            char c;
            if (val >= 10) {
                c = val + 55;
            }
            else c = val + '0';
            s = c + s;
            N /= B;
        }
        cout << s;
        return 0;
    }
    cs


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

    [백준] 1854번 k번째 최단 경로 찾기  (0) 2020.07.23
    [백준] 11060번 점프점프  (0) 2020.07.22
    [백준] 2344번 거울  (0) 2020.07.18
    [백준] 2151번 거울설치  (0) 2020.07.17
    [백준] 1016번 제곱 ㄴㄴ수  (0) 2020.07.16

    댓글

Designed by Tistory.