링크
https://www.acmicpc.net/problem/2745
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
ZZZZZ 36
60466175
char input[10000];
int B;
int result = 0;
scanf("%s %d", input, &B); //문자와 진법을 입력받음
int len = strlen(input); //문자열 갯수 구하기
for (int i = 0; i < len; i++) {
int digit;
if (input[i] >= '0' && input[i] <= '9') {
digit = input[i] - '0'; //보기에는 숫자이지만 문자이므로 아스키 코드 연산을 이용해 숫자값을 구해야 됨
}
else if (input[i] >= 'A' && input[i] <= 'Z') {
digit = input[i] - 'A' + 10;
}
result += digit * pow(B, len - 1 - i); //진법 변환 식
}
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char input[10000];
int B;
int result = 0;
scanf("%s %d", input, &B); //문자와 진법을 입력받음
int len = strlen(input); //문자열 갯수 구하기
for (int i = 0; i < len; i++) {
int digit;
if (input[i] >= '0' && input[i] <= '9') {
digit = input[i] - '0'; //보기에는 숫자이지만 문자이므로 아스키 코드 연산을 이용해 숫자값을 구해야 됨
}
else if (input[i] >= 'A' && input[i] <= 'Z') {
digit = input[i] - 'A' + 10;
}
result += digit * pow(B, len - 1 - i); //진법 변환 식
}
printf("%d", result);
return 0;
}