-
백준 2745 - 진법 변환백준 algorithm 2020. 4. 1. 01:40반응형
=> 진법 변환 2와 달리 B 진법으로 표시되어 있는 수를 10진법으로 변환하면 되는 문제이다.
***
참고 : https://codingham.tistory.com/116
=> 알고리즘
B 진법 수 N 을 10진법으로 나타내기
102 (3) = (1 *3^2) + (0* 3^1) + (2* 3^0)
위의 식처럼 각 수에 따라 승수는 줄어들게 되고 각 자리에 해당되는 수를 계산하여 내가 원하는 값에 더해주면 되는 것이다.
=> 본인은 여기서 answer 변수를 전체 값을 더해주는 값으로 사용하였다.
***
10진법으로 바꾼수는 10억보다 작다
=>
이 뜻은 최종 결과값인 answer가 int 의 범위를 넘지 않는다는 것이다.
대략 20억을 넘는 수가 나올 경우는 Long, 혹은 long long 을 사용해야 함을 명심하자.
#include <iostream> #include <string> #include <algorithm> #include <cmath> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string N; int B; cin >> N >> B; int length = N.length()-1; int answer=0; for(int i = 0; i<=length; i++) { if(N[i]>=48 && N[i] <= 57) // number { int tmp = N[i] - 48; answer+= (pow(B, length-i) *tmp); } else if(N[i]>=65 && N[i] <= 90) { int tmp = N[i] - 55; answer+= (pow(B, length-i) *tmp); } } cout << answer <<'\n'; return 0; }
+)
=> 이와 같이 answer 의 범위를 넘는 경우를 넣을 경우엔 쓰레기 값이 출력된다.
반응형'백준 algorithm' 카테고리의 다른 글
백준 11653 - 소인수분해 (2) 2020.04.05 백준 11576 - Base Conversion (0) 2020.04.05 백준 11005 - 진법 변환 2 (0) 2020.04.01 백준 1157 - 단어공부 (0) 2020.03.29 백준 2675 - 문자열 반복 (0) 2020.03.26