https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
풀이
#include <stdio.h>
int main() {
char n[31]; // b진법 수 n
int b; // b진법
long long total = 0; // 10진법으로 바꾼 수(int형의 범위를 벗어날수있음)
int i = 0;
scanf("%s %d", &n, &b);
while (n[i] != '\0') { // n문자열이 끝날때까지 반복
total *= (long long)b; // total = (total*b) + n[i] (호너법)
if (n[i] >= 'A' && n[i] <= 'Z') { // 문자열이 A부터 Z까지일때
total += n[i] - 55; // A~Z까지 아스키코드와의 차가 55
}
else // n[i]가 숫자일때
total += n[i] - '0'; // total = (total*b) + n[i] (호너법)
i++; // i 1씩 증가
}
printf("%lld\n", total); // 10진법 변환 값 출력
return 0;
}
n 배열이 31자리까지인 이유 :
b진법의 최솟값은 2일때 n을 10억이하 근사로 표현하면 2^30 = 1,073,741,824이다.
문자열의 마지막 널문자(\0)까지 포함하여 31칸 배열을 만든다.
호너법 공부 필수
f(x) = (f * x) + a[i]
'코딩 > 백준 문제 (브론즈)' 카테고리의 다른 글
[백준/27866/C언어] 문자와 문자열 _ 풀이 (0) | 2023.08.09 |
---|---|
[백준/11005/C언어] 진법 변한 2 _ 풀이 (0) | 2023.08.09 |
[백준/2441/C언어] 별 찍기 - 4 _ 풀이 (0) | 2023.08.08 |
[백준/2558/C언어] A+B - 2 _ 풀이 (0) | 2023.08.08 |
[백준/4101/C언어] 크냐? _ 풀이 (0) | 2023.08.08 |