진법 변환 알고리즘
1. 알고리즘의 이해
몫을 진법으로 나눠가면서 notation 보다 작아질 때 까지 반복한다
몫이 notation 보다 작아졌다면 반복문을 탈출한 뒤, 몫을 변환 결과 앞에 추가시켜준다
2. 소스 코드
#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;
string convertion(int num,int notation){
string res = "";
int mok = num;
int nmg = 0;
while(mok >= notation){
nmg = mok % notation;
mok /= notation;
// 10진법보다 크고 나머지가 10 이상인 경우
if(notation > 10 && nmg >= 10){
res = (char)(nmg+55) + res;
}else{
res = to_string(nmg) + res;
}
}
if(notation > 10 && mok >= 10){
res = (char)(mok+55) + res;
}else{
res = to_string(mok) + res;
}
return res;
}
int main(int argc, const char * argv[]) {
// cin,cout 속도향상
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int num,notation;
cin >> num >> notation;
cout << convertion(num,notation) << "\n";
return 0;
}
3. 라이브러리 사용
2진수의 경우 bitset 이라는 C++ 라이브러리를 통해 쉽게 출력 가능!!
#include <iostream>
#include <bitset>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, const char * argv[]) {
// cin,cout 속도향상
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
string bit = bitset<5>(n).to_string();
cout << bit << "\n";
return 0;
}
4. 추가 문제
int 형의 정수를 입력받아 비트 변환 후, 1의 개수를 출력해라
#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;
int convertion(int num){
string res = "";
int mok = num;
int nmg = 0;
while(mok >= 2){
nmg = mok % 2;
mok /= 2;
res = to_string(nmg) + res;
}
res = to_string(mok) + res;
int cnt = 0;
for(int i=0; i<res.size(); i++){
if(res[i] == '1')
cnt++;
}
return cnt;
}
int main(int argc, const char * argv[]) {
// cin,cout 속도향상
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int num;
cin >> num;
cout << convertion(num) << "\n";
return 0;
}
'Algorithm > 알고리즘' 카테고리의 다른 글
[Algorithm] 최대공약수(GCD), 최소공배수(LCM) (0) | 2019.02.09 |
---|---|
[Algorithm] 에라토스테네스의 체 (0) | 2019.02.09 |
[Algorithm] 비트마스킹 (0) | 2019.01.06 |
[Algorithm] 탐색 알고리즘 (0) | 2018.11.25 |
[Algorithm] 다이나믹 프로그래밍 (0) | 2018.09.11 |