programming/알고스팟

알고스팟 - 튜토리얼 ENDIANS

Ryuuu 2020. 5. 14. 19:43

튜토리얼인데 생각보다 어려웠다....

연등때 해서 그렇겠지...? 그래야돼......

2진수로 바꾼다음 8비트로 쪼개서  push 한 뒤 pop 했다.

하고보니 이렇게까지 해야했나 싶다....

ENDIANS

#include
#include
#include
using namespace std;
void little(unsigned int big);
int main(){

	int n;
	int i;
	unsigned int input;
	vector arr(10002);
	cin >> n;
	
	for(i=0;i<n;i++){
		cin >> input;
		arr[i] = input;
	}
	
	for(i=0;i<n;i++){
		little(arr[i]);
	}

	return 0;
}

void little(unsigned int big) {
	unsigned int input = big;
	string s="";
	int i;
	int len = 0;
	vector addr;
	string str="";
	string big_end="";
	unsigned int result = 0;
	unsigned int origin = 1;
	
	while(input > 1){

		if(input % 2 == 0){
			s+='0';
		}
		else {
			s+='1'; //2진수 변환
		}
		input/=2;
	}
	s+='1';
	
	len = s.length();
	
	for(i=0;i<32-len;i++){
		s+='0';
	}
	reverse(s.begin(),s.end());
	
	for(i=0;i<32;i++){
		str += s[i];

		if (i % 8 ==7){
			addr.push_back(str);
			str = "";
		}			
	}
	
	for(i=0;i<4;i++){
		s = addr.back();
		big_end += s;
		addr.pop_back();
	}
	
	reverse(big_end.begin(),big_end.end());

	for(i=0;i<32;i++){
		if(big_end[i] =='1'){
			result += origin;	
		}
		origin *=2;
		
	}
	
	cout << result << endl;
}