알고리즘 연습/백준
[C++][BOJ-11005/2745/1373]진법 변환, stoi , cout << oct, &연산 , -2 진법
_h.j
2021. 2. 16. 23:43
728x90
10진 -> n 진법
소스코드
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,b;
string ans;
cin>> n>>b;
while(n>0){
char c = (n%b)<10 ? char(n%b + '0') : char('A'-10 + n%b);
ans = c + ans;
n/=b;
}
cout<<ans;
return 0;
}
n -> 10진 stoi(s,0,n)
소스코드
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
int n;
cin >>s >>n;
cout<<stoi(s,0,n);
return 0;
}
string s가 n진법으로 표현되었다 라는 것을 알려주고 int로 변환.
2진 -> 8진
소스 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
string n,ans;
cin>>n;
int len = n.size();
if( len %3 == 1)
cout<<n[0];
else if(len%3==2) cout <<( n[0] -'0')*2 + (n[1] -'0') ;
for(int i = len%3 ; i < len ; i+=3 )
cout << ( n[i]-'0') * 4 + (n[i+1]-'0')*2 + (n[i+2] -'0');
return 0;
}
런타임 에러나지만 쉽게..
#include<bits/stdc++.h>
using namespace std;
int main(){
string n;
cin >> n;
cout << oct << stoll(n,0,2);
return 0;
}
cout 출력을 8진수로 하도록 바꿨다...
8진 -> 2진
소스코드1
#include <bits/stdc++.h>
using namespace std;
int main(){
string n;
cin >> n;
for(int i = 0,tmp ; i < n.size();i++){
string ans;
tmp = n[i] - '0';
if(tmp-4>=0){
ans += '1';
tmp -=4;
}
else ans += '0';
if(tmp-2>=0){
ans += '1';
tmp -=2;
}
else ans += '0';
if(tmp-1>=0){
ans += '1';
tmp -=1;
}
else ans += '0';
(i==0) ? cout<<stoi(ans) : cout<<ans;
//cout << ((i==0) ? stoi(ans) : ans );
}
return 0;
}
마지막에 cout 조심
소스코드2 - 숏코딩 &연산
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
bool flag=false;
while( (n= getchar()) >='0' ){
n = (n&4)*25 + (n&2)*5 + (n&1);
//(flag) ? printf("%03d",n): printf("%d",n); // 이것도 가능
printf( (flag)? "%03d" : "%d", n );
flag =true;
}
return 0;
}
& 연산자를 사용했다.
cout<< (4&4) << endl; // 결과 : 4
cout<< (3&4) << endl; // 결과 : 0
cout<< (8&4) << endl; // 결과 : 0
cout<< (20&4) << endl; // 결과 : 0
같은 자리에 1 있는 것만 0 아닌 결과 나옴.
이것을 이용해 문제를 푼다.
-2 진법
소스 코드
n -> m 진법
소스 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b,m,tmp;
string ans;
long long dec=0;
cin >> a >> b >>m;
while(m--){
cin>>tmp;
dec = dec+(int)pow(a,m)*tmp ;
}
while(dec){
ans = to_string(dec%b)+' ' +ans;
dec/=b;
}
cout<<ans;
return 0;
}
728x90