관리 메뉴

cyphen156

백준-일반 수학1 2745 진법 변환 본문

컴퓨터공학/알고리듬 풀이

백준-일반 수학1 2745 진법 변환

cyphen156 2025. 2. 6. 10:38

진법 변환

N진의 수가 입력되면 10진법으로 변환하여 출력하는 프로그램

첫번째 입력으로는 수가 

문자열 파싱할 줄 알면 쉽다.

제약사항

  • 2 <= N <= 36
  • -1,000,000,000 <= Result <= 1,000,000,000

주의 사항

최댓값이 큰 숫자이다. 

하지만 32비트 자료형으로 표현가능하다.

C풀이

진법 변환_2745.c

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int power(int base, int exponent);

int main(void) {
    char s[100];
    int n, len, result = 0;
    int nArray[100] = { 0 };    //원본 보존용 변환 정수형 배열
    scanf("%s %d", s, &n);
    for (len = 0; s[len] != '\0'; len++);
    for (int i = 0; i < len; i++) {
        if ('0' <= s[i] && s[i] <= '9')
            nArray[i] = s[i] - '0';
        else if ('A' <= s[i] && s[i] <= 'Z')
            nArray[i] = s[i] - 'A' + 10;
    }
    for (int i = 0; i < len; i++) {
        result += nArray[i] * power(n, len-i-1);
    }
    printf("%d", result);
    return 0;
}

int power(int base, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {
        result *= base;
    }
    return result;
}

CPP풀이

진법 변환_2745.cpp

/**
 * 백준 진법 변환_2745
 * N진의 수가 입력되면 10진법으로 변환하여 출력하는 프로그램
 * 첫번째 입력으로는 수가 
 * 문자열 파싱할 줄 알면 쉽다.
 * 
 * 제한사항
 *********************************************
 * 2 <= N <= 36                              *
 * -1,000,000,000 <= Result <= 1,000,000,000 *
 *********************************************
 *
 *
 *
 * 주의
 * 최댓값이 큰 숫자이다. 하지만 32비트 자료형으로 충분하다.
 * 
 * 풀이시간 50분
 */


#include <iostream>

using namespace std;

int main(void)
{
    string inputNumber;
    int PositionalNumberSystem, changedNumber = 0;
    cin >> inputNumber >> PositionalNumberSystem;

    for (int i = 0; i < inputNumber.length(); ++i)
    {
        // 일단 문자를 숫자로 변환하기
        // --> AToI
        // 일단 ASCII 48만큼 빼면 숫자에 대한 처리 완료 
        // 0 ~ 9
        int temp = inputNumber[i] - 48;

        // 변환 값이 9보다 크면 진법수라는 것을 의미한다.
        // -> :, ;, <, =, >, ?, @ 라는 아스키 값은 제외
        // A ~ Z
        if (temp > 9)
        {
            temp -= 7;
        }

        // 변환 완료된 숫자를 더해라
        changedNumber = changedNumber * PositionalNumberSystem + temp;        
        }

    cout << changedNumber << endl;
    return 0;
}

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com