백준은 여기 안올리는데 이 문제는 하도 뻘짓을 많이 해서 올려본다.
진법 변환 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 3462 | 1937 | 1636 | 57.103% |
문제
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진법으로 출력한다.
예제 입력 1
ZZZZZ 36
예제 출력 1
60466175
처음엔
1 | cin >> N >> B; | cs |
이런 식으로 N (char 배열)과 B (int) 를 입력 받고, 문자이면 아스키 코드값을 이용해 진수값을 계산할 수 있도록 코드를 짜주었다.
Run-Time Check Failure #2 - Stack around the variable 'N' was corrupted
이 오류가 나면서 정상적으로 작동하지 않았지만.
정확히는 VS 환경에선 문자 그대로 '작동은' 잘했으나 ideone.com 과 같은 웹 ide에서 원하는 결과값이 나오지 않았다.
해당 오류 내용으로 구글링을 해본 결과 크기가 서로 맞지 않는 자료형에 대입하려고 했을때 Run-Time Check Failure #2 를 뱉어낸다고 하여 문자를 정수로 바꾸어 대입해주는 부분에서 문제가 있는 것으로 판단하고 고치려 하였다.
(출처: http://www.jynote.net/551)
1 2 3 | char tmp[90]; sprintf(tmp, "%c", N[len - i] - 55); N[len - i] = tmp[0]; | cs |
이런식으로 생전 처음보는 sprintf 라는 함수를 이용하여 char 값으로 바꿔 집어넣는 무식한 짓도 해보았지만 결과는 실패.
아무리 해봐도 문제가 해결되지 않아서 저 부분에서 시작해 코드 전체로 한 줄씩 주석을 씌운 끝에 처음 cin >> N; 부분에서 문제가 있음을 깨달았다.
허무하게도 cin >> N; 을 아래 scanf("%s", N); 으로 수정하니 해결.
덕분에 삽질 잘했다.
> 최종 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> #include <string.h> #include <stdlib.h> #include <math.h> #include <stdio.h> using namespace std; int main(void) { char N[32]; long long B, res = 0; scanf("%s", N); cin >> B; int len = strlen(N); for (int i = len; i > 0; i--) { if (N[len - i] >= 65) { res += (long long)((N[len - i]-55) * (long long)pow(B, i - 1)); } else { res += (long long)((N[len - i]-48) * (long long)pow(B, i - 1)); } } cout << res; } | cs |
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 | 제출한 시간 |
---|---|---|---|---|---|---|---|---|
8812820 | kyr9389 | 2745 | 맞았습니다!! | 2172 KB | 0 MS | C++ / 수정 | 472 B | 26분 전 |
8812818 | kyr9389 | 2745 | 컴파일 에러 | C++ / 수정 | 452 B | 26분 전 | ||
8812790 | kyr9389 | 2745 | 틀렸습니다 | C++ / 수정 | 471 B | 38분 전 | ||
8812786 | kyr9389 | 2745 | 틀렸습니다 | C++ / 수정 | 467 B |
'이론 > 알고리즘' 카테고리의 다른 글
백준 1463번: 1로 만들기 (0) | 2018.08.06 |
---|---|
알고리즘 스터디 5회차 - 동적 계획법 (백준 2579번: 계단 오르기) (0) | 2018.06.05 |
알고리즘 스터디 4회차 - Linked List로 Heap Sort구현 (1) | 2018.03.25 |
알고리즘 스터디 3회차 - 이진트리(Binary Tree) 구현 (0) | 2018.03.09 |
알고리즘 스터디 2회차 - Stack & Queue 구현 (0) | 2018.02.28 |
댓글