촉촉한초코칩
[백준] 2745(진법 변환) C언어 본문
문제
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진법으로 출력한다.
(vs code에서 c언어 실행하려고 했는데 안됨.. mingw 설치했는데도 실행이 안돼서 terminal에서 gcc 명령어로 실행 파일 만듦..)
코드 설명
AAAA 16이 입력되었다면, A는 10진수로 11이니까 11 * 16^0 + 11 * 16^1 +... 이렇게 계산이 되어야 한다.
- 즉, 입력된 문자가 10진수로 몇인지 계산,
- 거기에 입력된 진법^몇번째 숫자인지
- 이걸 다 더하기
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char s[50];
int n;
int result = 0;
scanf("%s %d", s, &n);
char ans[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
for(int i=strlen(s)-1; i>0-1; i--) {
for(int j=0; j<26; j++) {
if(s[i] == ans[j]) {
result += (j+1) * pow(n, i);
printf("%d %d %d %d\n", j+1, n, i, result);
}
}
}
printf("result : %d\n", result);
}
계산이 잘 되지 않음.. 어디서 잘못된거지?
문제
- a는 10부터 시작해야 하는데 내가 1부터 계산하고 있었음
- 알파벳말고 숫자가 들어올 때는?
해결
- ans에 0~9까지 추가하고 j+1로 변경
또 문제점 발생..
- 만약 10 10을 입력한다면, 1이 10^1, 0이 10^0이 되어야 하는데, 거꾸로 계산이 됨
해결
- 지수를 계산할 다른 변수 선언
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char s[50];
int n;
long long result = 0;
int tmp = 0;
scanf("%s %d", s, &n);
char ans[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
for(int i=strlen(s)-1; i>=0; i--) {
for(int j=0; j<strlen(ans); j++) {
if(s[i] == ans[j]) {
result += (j) * pow(n, tmp);
// printf("%d %d %d %d\n", j, n, tmp, result);
}
}
tmp+=1;
}
printf("%lld\n", result);
}
이제 어려운 문제들만 남았는데 어떻게 풀어야할지를 모르겠어서 계속 피하게됨.. 그냥 풀이 보면서 하자는 마음으로 했는데 막상 푸니까 나 스스로 풀게됨..ㅋㅋㅋ
일단 해보는 걸로..~!
'Algorithm' 카테고리의 다른 글
[백준] 2292(벌집) Python (0) | 2024.09.14 |
---|---|
[백준] 11005(진법 변환 2) C언어 (0) | 2024.09.07 |
** [백준] 1431(시리얼 번) python (0) | 2024.08.04 |
[백준] 2903(중앙 이동 알고리즘) C언어, python (0) | 2024.07.07 |
[백준] 2563(색종이) C언어, Python (0) | 2024.06.28 |