백준 algorithm
백준 2745 - 진법 변환
cosmohoo
2020. 4. 1. 01:40
반응형
=> 진법 변환 2와 달리 B 진법으로 표시되어 있는 수를 10진법으로 변환하면 되는 문제이다.
***
참고 : https://codingham.tistory.com/116
백준 11005 - 진법 변환 2
=> 간단한 진법 변환 문제이다. => 진법 변환의 알고리즘을 알아야한다. ex) 11 을 3진법으로 나타내고자 한다. 11 / 3 = 3 ... 2(나머지) 3 / 3 = 1 ... 0 1/3 = 0 ... 1 =>의 결과로 102(3) 의 결과를 얻을 수..
codingham.tistory.com
=> 알고리즘
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 의 범위를 넘는 경우를 넣을 경우엔 쓰레기 값이 출력된다.
반응형