관리 메뉴

Storage Gonie

(5) [C++, Java] 백준 No.11005 : 진법 변환2 본문

알고리즘/백준풀이7. 수학

(5) [C++, Java] 백준 No.11005 : 진법 변환2

Storage Gonie 2019. 5. 4. 15:14
반응형

문제

풀이

자세한 풀이 : 

 

# C++(나의 풀이)

- 나머지를 스택에 저장했다가 역순으로 꺼내는 방식을 사용하였고,
   10 이상의 나머지에 대해서 A, B, C, ... 를 출력해줘야 하는 것은 printf("%c") 를 이용하여 해결하였음.

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    int N, B;
    scanf("%d %d", &N, &B);

    stack<int> st;

    // B로 나눈 나머지를 스택에 저장하는 부분
    while(N != 0)
    {
        st.push(N % B);
        N = N / B;
    }

    // 스택에서 나머지를 꺼내주며 출력하는 부분
    while(!st.empty())
    {
        if (st.top() >= 10)
            printf("%c", st.top() + 55);    // ASCII:65('A') 이용
        else
            printf("%d", st.top());

        st.pop();
    }
}

# C++(백준 풀이)

- 스택대신에 string을 활용해서 나머지를 바로바로 변환해서 저장한 다음, reverse함수로 거꾸로 뒤집어 출력하는 방식.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    int N, B;
    cin >> N >> B;

    string s;

    while(N != 0)
    {
        int r = N % B;

        if (r < 10)
            s += (char)(r + '0');
        else
            s += (char)(r - 10 + 'A');

        N = N/B;
    }

    reverse(s.begin(), s.end());

    cout << s;
}

# Java

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int b = sc.nextInt();
        StringBuilder ans = new StringBuilder();
        while (n > 0) {
            int r = n % b;
            if (r < 10) {
                ans.append((char)(r + '0'));
            } else {
                ans.append((char)(r - 10 + 'A'));
            }
            n /= b;
        }
        System.out.println(ans.reverse());
    }
}
반응형
Comments