10진수를 n진수로 변환하기

다음은 233 이란 10진수를 2진수로 변환하는 과정을 나타낸 그림이다.

위 그림을 참조하여 라이브러리를 사용하지 말고 10진수를 n진수로 변환하는 프로그램을 작성하시오.. (단, n의 범위는 2 <= n <= 16)

예)

  • 2진수로 변환 : 23310 --> 111010012
  • 8진수로 변환 : 23310 --> 3518
  • 16진수로 변환 : 23310 --> E916
stack
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

120개의 풀이가 있습니다. 1 / 12 Page

진법의 변환된 수에서 0이 쭈욱 딸려오는 것을 무시해야 하네요.

function convertBase(base, e) {
  if ( e < 0 || e > 16) return -1;
  const digit = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'];
  let ans = [], tailingZero = true;
  const solve = (base, e) => {
    const num = Math.floor(base / e);
    if (!tailingZero || base % e !== 0) {
      ans.unshift(digit[base % e]);
      tailingZero = false;
    }
    return (num === 0) ? -1 : solve(num, e);
  }
  solve(base, e);
  return ans.join('');
}

console.log(convertBase(51712, 2));
console.log(convertBase(233, 8));
console.log(convertBase(233, 16));

2017/08/06 17:36

DS

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
print('==============================================')
print('binary_system:2 / octal_num_system:8 / hexadecimal number:16')   
user_input=input('Input hex data: ')
system_input=input('input system: ')
print('==============================================')

a=int(user_input)
si=int(system_input)
def change_num_system(a,si):
    list=[]
    if a<si:
        list.append(str(a))
    else:
        while a>=si:
            if a%si==0:
                list.append(str(0))
            else:
                if a%si==10:
                    list.append('A')
                elif a%si==11:
                    list.append('B')
                elif a%si==12:
                    list.append('C')
                elif a%si==13:
                    list.append('D')
                elif a%si==14:
                    list.append('E')
                elif a%si==15:
                    list.append('F')
                else:
                    list.append(str(int(a)%si))
            a=a/si
            if a<si:
                list.append(str(a))
                print(list)
                break

    list.reverse()
#   print(list)
    print(''.join(list))

change_num_system(a,si)


※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.*;

public class DecimalConversion {
    public static String converter(int n, int base) {
        if(n != 0) {
            if(n%base > 9) return converter(n/base,base) + (char) (n%base+55); 
            else return converter(n/base,base) + (char) n%base;
        }
        else return "";
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int base = sc.nextInt();
        System.out.println(converter(n,base));
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

좋은 풀이가 엄청 많네요...

dict = {'10' : 'A', '11' : 'B', '12' : 'C', '13' : 'D', '14' : 'E', '15' : 'F'}
def ts(a, n, list = []):
    while a != 0:
        list.append(str(a%n))
        a = a//n

    list = ",".join(list[::-1])
    for a, b in dict.items():
        list = list.replace(a,b)
    return "".join(list.split(','))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
package java_tutorial;

import java.util.Scanner;

public class Ten_toOthers {

    public static void main(String[] args) {

            int remain = 0;
            int quot = 1;
            String answer = "";
            Scanner sc = new Scanner(System.in);
            StringBuffer sb = new StringBuffer();

            System.out.print("From : ");
            int from_Num = sc.nextInt();
            System.out.print("To(2~16) : ");
            int to_Num = sc.nextInt();

            System.out.println("");
            System.out.print(to_Num + "진수로 변환 : " + from_Num + "(10) -------> ");

            while(quot>0)
            {
                    quot = from_Num / to_Num;
                    remain = from_Num % to_Num;
                    answer += remain;
                    from_Num = quot;
            }
            sb.append(answer);
            System.out.println(sb.reverse()+ "("+ to_Num + ")");
    }

}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def systemconverter(target_system, decimal_number): 

    if 2<= target_system <= 16: 
        result =[]
        zero_count = 0
        while decimal_number//target_system >= 0:

            if decimal_number//target_system == 0:
                zero_count += 1
                if zero_count == 2:
                    break

            result.append(decimal_number % target_system)
            print(result)

            decimal_number = decimal_number//target_system

        print("결과창")


        result.reverse()
        print(result)
        index = 0
        for num in result: 
            if num == 10: 
                    result[index] = "A" 
            elif num == 11: 
                    result[index] = "B"
            elif num == 12: 
                    result[index] = "C"
            elif num == 13: 
                    result[index] = "D"
            elif num == 14: 
                    result[index] = "E"
            elif num == 15: 
                    result[index] = "F"
            elif num == 16: 
                    result[index] = "G"
            index += 1

        print("".join(list(map(lambda x: str(x), result)))+ "\t" + str(target_system)+"진법")

    else:
        print("##'2 ~ 16'진법까지만 변환이 가능합니다##")


systemconverter(2,233)
systemconverter(8,233)
systemconverter(16,233)

또 하나의 lengthy한 trash solution을 창조해냈네요..하하.. 몫과 나머지를 이용하였고, List에 순서대로 append()써서 추가한 뒤 순서 reverse()해주었습니다.

아래는 10이상 숫자를 A,B,C,D,E,F,G로 바꾸는... 노가다..(눈물)입니다

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

// 초보입니다.. 스택은 직접 구현했습니다.

    private static int number = 233;
    public static void main(String[] args) {
//      convertAnotherBase(2);
//      convertAnotherBase(8);
        convertAnotherBase(16);
    }

    public static void convertAnotherBase(int baseType){
        int quotient = 0;
        int remainder = 0;
        do{
             quotient = number / baseType;
             remainder = number % baseType;
             Stack.push( remainder >= 10 ? mappingBase16(remainder): Integer.toString(remainder));
             number = quotient;
        }while( quotient >= baseType );
        Stack.push( quotient >= 10 ? mappingBase16(quotient): Integer.toString(quotient));
        Stack.showStatck();
        Stack.clear();
    }

    public static String mappingBase16(int number){
        String str = "";
        if ( number == 10 ){
            str = "A";
        }else if ( number == 11){
            str = "B";
        }else if ( number == 12){
            str = "C";
        }else if ( number == 13){
            str = "D";
        }else if ( number == 14){
            str = "E";
        }else {
            str = "F";
        }
        return str;
    }

public class Stack {
    private static final int SIZE = 255;
    private static String[] array;
    private static int idx;

    static{
        array = new String[255];
        idx = 0;
    }

    public static String pop(){
        if (idx == 0){
            System.out.println("stack is empty");
            return "";
        }


        return array[idx--];
    }

    public static boolean push(String item){
        if (idx >= SIZE){
            System.out.println("stack is full");
            return false;
        }
        array[idx++] = item; 
        return true;
    }

    public static void showStatck(){
        if ( idx == 0 ){
            System.out.println("stack is empty");
        }else{
            for ( int i = idx - 1 ; i >= 0; i-- ){
                System.out.print( array[i] );  
            }
        }
    }

    public static void clear(){
        for ( int i = 0 ; i < idx; i++){
            array[0] = "";
        }
    }
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#d_num = decimal number
#t_num = target number

def DecimalTo(d_num,t_num):

    dic = {10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}
    s = ''

    if t_num > d_num:
        return d_num

    while(d_num):

        remainder = (d_num % t_num)

        if remainder >=10:
            s = dic[remainder] + s 
        else: 
            s = str(d_num%t_num) + s

        d_num = d_num/t_num

        if t_num > d_num:
            if d_num >=10:
                return dic[d_num] + s
            else:
                return str(d_num) + s

    return 0

print DecimalTo(10,3)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

import java.util.Scanner;

public class dissolve { public static void main(String[] args) { //편의를 위해 입력 제한 256개 int[] inputs = new int[256]; Scanner input = new Scanner(System.in); int length = 0; //총 입력 수 기억하기 위한 변수 int number = 10; //while문이 반드시 실행하기 위해 10으로 초기화 int result = 0; //최종적으로 값을 저장하는 변수

System.out.print("숫자를 입력, 입력을 끝내려면 0~9까지의 숫자를 입력(최대 256개) : ");
while(number > 9) // 10 이상의 수가 입력되었을 경우
{
  number = input.nextInt();//입력한 정수를 받음
  if(number < 10)//10보다 작을 경우
  {
    System.out.println("입력을 종료.");
    break;
  }
  inputs[length] = number;//배열에 입력을 저장함
  length++;//배열 위치 한칸 옮김
}

System.out.println("입력했던 숫자들을 나열.");

//제대로 입력되었는지 확인하기 위한 출력
for(int i = 0; i < length; i++)
{
  int n = inputs[i];
  System.out.println(n);
}
System.out.println();

for(int i = 0; i < length; i++)
{
  int temp;//배열 내부 값 저장 변수
  int tempTwo = 1;//각 자리값을 저장하는 변수
  int n = 1;//10의 몇 제곱인지 나타내기 위한 변수이며, 나머지를 봐야하므로 1부터 시작

  temp = inputs[i];
  while(temp > 0)//temp값은 매 반복마다 줄어들게 됨.
  {
    int powed = (int)Math.pow(10,n);
    tempTwo = tempTwo * (temp % powed);//매 나머지 값을 곱함
    temp = temp / powed;//temp 값 수정
    n++;//제곱값 증가
  }

  result += tempTwo; //최종 결과를 합산
}

System.out.println(result); //출력

} }

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
term = "0123456789ABCDEF"

def dton(dec, n):
    rem = ''
    while dec:
        rem = term[dec % n] + rem
        dec = dec // n
    return rem

# 재귀 버전
def dton_rec(dec, n):
    if not dec: 
        return ''

    return dton_rec(dec//n, n) + term[dec % n]
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 120
javascript x 4
python x 56
java x 24
기 타 x 12
cpp x 15
cs x 4
ruby x 1
scala x 2
perl x 1
objectivec x 1