각 자료형의 크기를 통해 숫자의 자리수를 판단할 수 있다.
예컨대 long은 8byte 자료형인데, 1바이트 당 8비트가 들어가므로
총 64비트로 이루어진 숫자라는 의미가 된다.
컴퓨터는 모든 숫자를 이진수로 저장하기 때문에, 부호를 판별하기 위해 MSB라는
부분의 비트 하나를 부호판별을 위해 사용한다.(signed)
따라서 -2^63~2^63-1까지 범위를 표현할 수 있다.
입력받은 수의 데이터 크기를 판단하고 어떤 datatype에 해당하는지
n can be fitted in:
* dataType
의 형태로 나타내주면 되는 문제다. 만약 해당하는 datatype이 두 개 이상이면
각각 한 줄에 출력하고 크기 별로 정렬해 주어야 한다.
만약 이 네가지 기본 형식 어디에도 해당하지 않으면
n can't be fitted anywhere.
을 출력해주면 된다.
import java.util.*;
import java.io.*;
class Solution{
public static void main(String []argh) {
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
for(int i=0;i<t;i++) {
try {
long x=sc.nextLong();
System.out.println(x+" can be fitted in:");
if(x>=-128 && x<=127)System.out.println("* byte");
//Complete the code
if(x>=-32768 && x<=32767)System.out.println("* short");
// 예시가 있어서 힌트를 얻기 쉬웠던 것 같다. 실수형 범위를 지정해 주고 출력할 문자를 적어준다.
if(x>=Math.pow(-2, 31) && x<=Math.pow(2,31)-1)System.out.println("* int");
// int와 long 부터는 자리값이 너무 커져서 숫자를 전부 다 적어주는 것은 비효율적인 것 같다.
if(x>=Math.pow(-2, 63) && x<=Math.pow(2,63)-1)System.out.println("* long");
}
// 4바이트인 int는 총 32비트이므로 -2^31~2^31-1
// 8바이트인 long은 총 64비트이므로 -2^63~2^63-1로 범위를 나타낼 수 있다.
//Loop II에서 배운 Math.pow를 통해 범위를 나타내 주었다.
catch(Exception e) {
System.out.println(sc.next()+" can't be fitted anywhere.");
}
}
}
}