프로그래밍 공부/백준 (C++)

[C++/백준 2745번] 진법 변환

Rocketbabydolls 2023. 7. 27. 12:26

https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

 

 

찾은 반례 : A 11 -> 17 출력

 

해결 : 알파벳 범위를 제대로 설정함.

 

코멘트 : 버그가 발생하면 쳐다보기보다는 직접 한줄씩 실행해 보자.

#include <iostream>
#include <stack>
#include <string>
#include <cmath>
using namespace std;

int main()
{
    string N;
    int B;
    char tmp; // string에서 char로 변경

    cin >> N >> B;
    int num = 0;
    int digit = 0;
    int sum = 0;
    for (int i = N.length() - 1; i >= 0; i--) // 조건을 >=로 변경
    {
        tmp = N[i];

        if (B > 10)
        {
            if (tmp >= 'A')
            {
                num = (tmp - 'A' + 10); // 문자를 숫자로 변환
            }
            else
            {
                num = (tmp - '0');
            }

            sum += num * pow(B, digit);
        }
        else
        {
            sum += (tmp - '0') * pow(B, digit); // 문자를 숫자로 변환
        }

        digit++;
    }

    cout << sum;

    return 0;
}