문제
https://algospot.com/judge/problem/read/ENDIANS
걸리버여행기에 나오는 두 섬나라인 소인국 릴리풋(Lilliput) 과 거인국 블루푸스쿠(Blefuscu)는 서로 너무 너무 너무 싫어해서 삶은 달걀을 깨는 방법가지고도 싸운답니다. little end(끝이 뾰족한부분)을 깨는 방법과 big end(끝이 둥근 부분)을 깨는 방법으로 전쟁까지 하게되는데요~ㅎㄷㄷ(자세한건...걸리버여행기를 읽어보세요~~)
두나라의 컴퓨터에서의 정수를 저장할 때 byte의 순서를 다른 방법으로 저장한다. 두나라의 정보교환을 위해서 변환이 필요하다.
예) 0x1234
little-endians | 0011 | 0100 | 0001 | 0010 |
big-endians | 0001 | 0010 | 0011 | 0100 |
즉, 요약하면 엔디안변환....끝
입력
테스트케이스의 수는 1이상 10000이하. 각 케이스의 입력은 32bit unsigned integer가 들어온다. 0부터 2^32-1까지 들어올수 있다. 자바라면 long을 써야될것같다.
출력
변환된 수
풀이
입력된 수를 16진수로 바꿨을때 8비트씩 쪼갠뒤에 이 값들을 shift하면 될것같다. 즉 0x1234&0xff00 하면 0x1200만 가져올수 있고 여기에서 0x1200>>8하면 0x12가된다. 나머지 부분도 (0x1234&0x00ff)<<8 한뒤에 두 결과를 합치면 변환이 될것이다.
package com.tutorial;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Endians {
public static void main(String[] args)throws NumberFormatException,
IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System. in));
int cnt = Integer.parseInt(br.readLine());
while (cnt -- > 0) {
Long a = Long.valueOf(br.readLine());
System.out.println(((a & 0x000000ff l) << 24) | ((a & 0x0000ff00 l) << 8) | ((a & 0x00ff0000 l) >> 8) | ((a & 0xff000000 l) >> 24));
}
}
}
'Algorithm > Algospot' 카테고리의 다른 글
[algospot]MISPELL (0) | 2014.12.11 |
---|---|
[algospot]ENCRYPT (0) | 2014.12.11 |
[algospot]LECTURE (0) | 2014.12.11 |
[algospot]MERCY (0) | 2014.12.11 |
algospot start (0) | 2014.12.11 |