알고리즘 - 10진수에서 N진수 변환, N진수에서 10진수로 변환(JAVA)

GwanMtCat·2023년 7월 25일
0
  • Integer 클래스에 내장되어 있는 메소드를 사용하는 경우
class Main {
   	// 10진수를 N진수로 변환
    private static String convertTenAsNRadix(int number, int radix) {
    	return Integer.toString(number, radix); 
    }
    
    
    // N진수 숫자를 10진수로 변환
    private static int convertNToTenRadix(String number, int radix)  {
    	return Integer.parseInt(number, radix);
    }
}

  • 알고리즘을 통해 구현하는 경우 (대문자)

    • int를 char로 변경하는 경우
      • 10 미만 인 경우 => (char)( n + '0')
      • 'A' 부터 'Z' 사이인 경우 => (char)( c + 'A' - 10)
    • char를 int로 변경하는 경우
      • 10 미만 인 경우 => (char)( n - '0')
      • 'A' 부터 'Z' 사이인 경우 => (char)( c - 'A' + 10)
class Main {
   	// 10진수를 N진수로 변환
    private static String convertTenAsNRadix(int number, int radix) {
    	StringBuilder sb = new StringBuilder();
        
        while(number > 0) {
        	int remain = number % radix;
            
            if (remain < 10) {
            	// int remain 예로 4라고 하면 10 밑이므로 char 0을 더해주면 char 4(52)
            	sb.append((char)(remain + '0');
            } else {
            	sb.append((char)(remain - 10 + 'A');
            }
            
            number /= radix;
        }
        
        return sb.reverse().toString();
        
    }
    
    
    // N진수 숫자를 10진수로 변환
    private static int convertNToTenRadix(String number, int radix)  {
        int temp = 1;
        int result = 0;
        
        for (int i = number.length()-1; i >= 0; i--) {
        	char c = number.charAt(i);
            
            if ('A' <= c && c <= 'Z') { 
                // char c에서 char A를 빼면  아스키 코드값, 
                // +10을 통해서 0~9를 넘는 범위로 조정
            	result += (int)(c - 'A' + 10) * temp;  
            } else {
            	// char c가 0~9범위에 있으므로 char '0'을 빼면 int 값이됨
            	result += (int)(c - '0') * temp;
            }
            
            temp *= radix;
        }
        
        return result;
    }

}

0개의 댓글