[백준11005] 진법전환 2

Groundstone51·2023년 11월 21일

백준 혼공

목록 보기
5/7

문제

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

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

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

입력

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

출력

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

풀이과정

tip

1. 저번 문제의 역으로 하면 된다. 즉, 10진수 N을 주어진 B로 나누고 그 나머지가 배열 ans에 출력되어야 한다.
2. 반복문 안에서 N이 0보다 작아질 때까지 1의 과정이 반복되어야 하며, 반복문의 끝에 N을 B로 나눈 몫으로 새롭게 정의를 해주어야 한다.
3.배열 ans로 받는 것이기에 ASCII코드를 사용하여 10이상의 수는 알파벳 문자로, 그 미만의 수는 숫자로 받아야 한다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
    int n, B;
    char ans[101];
    scanf("%d %d", &n, &B);
    int i = 0;
    
    while (n > 0) {
        int cal = n % B;
        if (cal >= 10) {
            ans[i] = cal + 55;
        } else {
            ans[i] = cal + '0';
        }
        i++;
        n /= B;
        /*n=n/B, 이렇게 해야 n이 몫으로 새로 정의되면서
        반복문에서 제대로 계산을 함.*/
    }

    for (int j = i - 1; j >= 0; j--) {
        printf("%c", ans[j]);
    } 
    /*int i가 배열 ans의 길이가 되므로*/
    return 0;
    }

one more thing

1. 기본적인 알고리즘 구조는 잘 만들었음
2. 그러나 for문에 비해 While문은 아직 연습이 더 필요한 것 같다.
int i를 while문 안에 정의해서 무한루프가 돌게 한다든지, n을 새롭게 정의해주지 않아서 값이 출력이 안되는 등 실수가 많았다. chat GPT가 그게 문제라고 가르쳐주긴 했지만 앞으로 While문을 쓸 때 같은 실수를 반복하지 않도록 해야 한다.
3.평소에는 Obsidian으로 익힌 마크다운을 통해 글을 적었지만 이제 HTML을 배우는 만큼 HTML을 통해 작성을 해봤다. 마크다운에 비해 불편한 점이 있지만 HTML이 웹 개발의 시작인 만큼 앞으로 익숙해지는 것이 필요할 것 같다.
profile
I'm always be here. Because I'm stone

0개의 댓글