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

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

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

예)

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

108개의 풀이가 있습니다. 1 / 11 Page

JAVA풀이 (stack을 이용했습니다)

import java.util.*;
import java.util.Stack;



public class a_20170622 {   //재귀함수로 n진수 만들기 

    int qt ;
    int rm ;
    int i ;
    String direction;
    String rmS ;
    String val ;
    Stack<String> myStack = new Stack<String>();

    public void quotient(int x, int y){

        qt = x/y ; 
        rm = x%y ; 
        rmS =Integer.toString(rm);
        direction = Integer.toString(y);
        if (x>=y){

        myStack.push(rmS);

        quotient(qt,y);

        }else{

            this.val  = rmS;

            while(!myStack.isEmpty())  {

            this.val = this.val +  (String)myStack.pop() ;

            }
            return;
        }




    }

    public static void main(String[] args) {

        a_20170622 ans = new a_20170622();

        ans.quotient(233,2);    

        System.out.println(ans.val + "("+ ans.direction + ")");

    }

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

javascript(ES6)

Number.DIGIT = "0123456789ABCDEF";

// 재귀로
Number.prototype.systemTo = function(base) {
    return this > base ? parseInt(this / base).systemTo(base) + "" + Number.DIGIT[this % base] :
                         Number.DIGIT[this];
};  

console.log((233).systemTo(2)); 
console.log((233).systemTo(8)); 
console.log((233).systemTo(16));

// 반복문으로
Number.prototype.systemTo = function(base) {
    var q = this,
        n = "";

    do {
        [q, r] = [parseInt(q / base), q % base];
        n = Number.DIGIT[r] + n;
    } while(q > 0);
    return n;
};

console.log((233).systemTo(2)); 
console.log((233).systemTo(8)); 
console.log((233).systemTo(16));
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// 진수 체계 바꾸기 - C
#include <stdio.h>
void converter(int i, int n)
{
    if (i >= n)
        converter(i / n, n);
    switch (i % n)
    {
    case 15:
        printf("F");
        break;
    case 14:
        printf("E");
        break;
    case 13:
        printf("D");
        break;
    case 12:
        printf("C");
        break;
    case 11:
        printf("B");
        break;
    case 10:
        printf("A");
        break;
    default:
        printf("%d", i % n);
        break;
    }
}
int main(void)
{
    int i, n;
    printf("변환할 수와 진수를 입력하세요.\n");
    scanf("%d %d", &i, &n);
    converter(i, n);
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("10진수를 입력하세요 : ");
        int num = sc.nextInt();
        System.out.print("몇 진수로 반환하시겠습니까? : ");
        int zinSu = sc.nextInt();

        ArrayList<Integer> list = new ArrayList<>();
        if(num>zinSu){

        do{
            list.add(num%zinSu);
            num/=zinSu;
            if(num<zinSu)
                break;

        }while(true);

        }
        System.out.print(num);

        for(int i=list.size()-1;i>=0;i--){
            System.out.print(list.get(i));
        }
        sc.close();
    }

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

c로 풀이.

#include <stdio.h>
int main(void)
{
    int i,j,num,n;
    char s[16]="0123456789abcdef";
    int num2[10];
    printf("숫자 진수 : ");
    scanf("%d%d",&num,&n);
    for(i=0;i<10;i++)
    {
        num2[i]=num%n;
        num/=n;
        if (num==0) break;
    }
    for(j=i;j>=0;j--) printf("%c",s[num2[j]]);
    printf("(%d)",n);
    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

a = int(input("십진수:"))
n = a
b = int(input("진수변환 (2~16):"))
c = []
d = []
e = ""
x = "0123456789ABCDEF"

while a >= 1 :
        c.append(a%b)
        a = int(a/b)

c.reverse()

for i in c:
        d.append(x[i])

for i in d:
        e = e + i

print ("십진수 %d를 %d진수로 변경하면 %s 이다." %(n, b, e))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// C언어 작성
#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct node* link;
} Stack;
Stack* getNode() {
    Stack* newNode = (Stack *)malloc(sizeof(Stack));
    newNode->link = 0;
    return newNode;
}
void Push(Stack** top, int data) {
    Stack* newNode = getNode();
    newNode->data = data;
    newNode->link = *top;
    *top = newNode;
}
int Pop(Stack** top) {
    int tmp = (*top)->data;
    Stack* tmp2 = *top;
    *top = (*top)->link;
    free(tmp2);
    return tmp; 
}

void func(int num, int n, Stack** top) {
    int i;
    for (i = 0; num > 0; i++) {             
        Push(top, num%n); 
        num /= n;
    }       
    for (i = 0; (*top) != 0; i++) {
        int a = Pop(top), b;
        if (a < 10)
            b = a + 48;
        else
            b = a + 55;
        printf("%c", b);
    }           
}

void main() {   
    Stack* Top = 0;
    int num, i;
    printf("10진수 입력 : ");   scanf("%d", &num);      
    for (i = 2; i <= 16; i++) {
        printf("%d진수 : ", i); 
        func(num, i, &Top);         
        printf("\n");
    }   
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
a = int(input("숫자를 입력하세요 : "))
n = int(input("2~16사이의 숫자를 입력하세요 : "))


R = ""

while 1:
    b = a % n

    if a % n == 10 : c = "A"
    elif a % n == 11 : c = "B"
    elif a % n == 12 : c = "C"
    elif a % n == 13 : c = "D"
    elif a % n == 14 : c = "E"
    elif a % n == 15 : c = "F"
    else: c = str(b)

    a = int((a - b) / n)

    R = c + R

    if a == 0 : break
    else : pass

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

k = int(input("숫자를 입력하세요 :"))
n = int(input("몇진수로바꿀까요? :"))
box = []
i=0



def change(arg):
    if arg==10 : 
        return('A')
    elif arg==11 :
        return('B')
    elif arg==12 :
        return('C')
    elif arg==13 :
        return('D')
    elif arg==14 :
        return('E')
    else  :
        return('F')




def number(arg,jin,ma):
    for p in range(0,jin):
        global k
        p=p+1
        if arg<p*pow(jin,ma):
            if p<11:
                box.append(str(p-1))
            else : 
                box.append(change(p-1))  
            k=k-(p-1)*pow(jin,ma)
            break


while True:
    i=1+i
    if k<(pow(n,i)):
        for j in range(i-1,-1,-1):
            number(k,n,j)
        break

change(box)       
print("".join(box))                   

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

public class practice {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int type = sc.nextInt();

        ArrayList list = new ArrayList<Integer>();
        while(num>0){
            list.add(num%type);
            num = num/type;
        }
        for(int i=1; i<=list.size(); i++){
            int j = (int)list.get(list.size()-i);
            if(j>=10){
                char ch = (char)((int)'A'+(j-10));
                System.out.print(ch);
            }else{
                System.out.print(j);    
            }
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 108
java x 21
javascript x 3
cpp x 15
기 타 x 9
python x 51
cs x 4
ruby x 1
scala x 2
perl x 1
objectivec x 1