백준 2745번: 진법 변환 링크
https://www.acmicpc.net/problem/2745
문제를 풀기 전 생각한 것
입력받은 게 알파벳인지 숫자인지 판별해 55를 빼줘야 할지 48을 빼줘야 할지 정하기
풀면서 어려웠던 점
예제는 제대로 나오는데 다른 수를 넣어보니 답이 이상하게 나왔다
이유는 pow 함수 때문이다
원래는 아래 코드가 아니라 pow(B, i)이었다
코드
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void)
{
char N[36] = {0};
int B, ans = 0;
scanf("%s %d",N,&B);
for (int i = 0; i < strlen(N); i++) {
if (N[i] >= 'A' && N[i] <= 'Z') {
ans += (N[i] - 55) * pow(B,strlen(N) - i - 1);
}
else {
ans += (N[i] - 48) * pow(B,strlen(N) - i - 1);
}
}
printf("%d", ans);
return 0;
}
풀면서 배운 점
pow 함수는 높은 자리부터 계산하는 성격이 있는데
그렇게 되면 pow(B,i)를 사용하는 코드에서 10 2를 입력하면
N[0] * 2^0 = 1 * 1 = 1
N[1] * 2^1 = 0 * 2 = 0
10 2를 입력하면 2가 나와야 하지만 1이 나온다
그래서 pow(B,strlen(N) - i - 1) 를 입력하면 지수가 반대로 들어가기 때문에 해결된다
반응형