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

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

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

예)

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

4개의 풀이가 있습니다.

C#으로 작성했습니다. 재귀함수로 더 이상 나누어 떨어질 수 없을 때까지의 나머지 값을 string으로 묶었습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodingDojang
{

    class CodingDojang
    {
        static void Main(string[] args)
        {
            DecimalConverter.Answer();
            Console.Read();
        }
    }

    public static class DecimalConverter
    {

        public static void Answer()
        {
            Console.WriteLine("Please type a decimal number: ");
            int number = int.Parse(Console.ReadLine());
            Console.WriteLine("Please type a form to convert: ");
            int convert = int.Parse(Console.ReadLine());

            string solution = string.Empty;

            solution = Division(number, convert, solution);

            Console.WriteLine(solution);
        }

        public static string Division(int number, int convert, string solution)
        {
            int remainder = number % convert;

            solution = ConvertToSymbol(remainder) + solution;
            number = number / convert;

            if (number > convert)
                solution = Division(number, convert, solution);
            else
                solution = ConvertToSymbol(number) + solution;

            return solution;

        }

        public static string ConvertToSymbol(int remainder)
        {
            if (remainder < 10)
                return remainder.ToString();
            else
            {
                switch (remainder)
                {
                    case 10: return "A"; break;
                    case 11: return "B"; break;
                    case 12: return "C"; break;
                    case 13: return "D"; break;
                    case 14: return "E"; break;
                    case 15: return "F"; break;
                }
            }

            return string.Empty;
        }

        public string ConvertToBaseNumber(int value, int n)
        {
            if (n == 2) return IntToString(value, new [] {'0', '1'});
            if (n == 16)
                return IntToString(value,
                    new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'});
            if (n == 26)
                return IntToString(value, Enumerable.Range('A', 26).Select(x => (char) x).ToArray());
            if (n == 60)
                return IntToString(value,
                    new[]
                    {
                        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c',
                        'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                        'w', 'x', 'y', 'z'
                    });
            return string.Empty;
        }

        public string IntToString(int value, char[] bases)
        {
            var result = string.Empty;
            var targeted = bases.Length;
            do
            {
                result = bases[value%targeted] + result;
                value /= targeted;
            } while (value > 0);
            return result;
        }

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

꼼수.ㅎ{.cs} static void Main(string[] args) { Console.WriteLine("몇진수로 변환할것인지 적으시요."); int n = int.Parse(Console.ReadLine()); Console.WriteLine("변환할 값을 적으시요."); int a = int.Parse(Console.ReadLine()); string value = Convert.ToString(a, n); Console.WriteLine("{0} 를 {1} 진법으로 변환하여 {2}", a, n, value); }

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include<stdio.h>
#include<windows.h>
#define MAX 10
int main()
{
    int a,i,b=233,count=0,c[MAX];

    printf("몇진수로 구하겠습니까?\n");
    scanf("%d",&a);
    while(1)
    {
        c[count]=b%a;
        b=(int)b/a;
        if(b==0) break;
        count++;
            }
    for(i=0;i<=count;i++)
        printf("%d",c[count-i]);
    system("pause");
    return 0;
}

2016/12/28 00:21

oh

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




class Program
    {
        private static List<string> rList = new List<string>();
        static void Main(string[] args)
        {
            int targetNum = 233;
            int quintessence = 16;
            string result = string.Empty;

            Generator(targetNum, quintessence);

            for (int i = rList.Count-1; i >= 0; i--)
            {
                result += rList[i].ToString();
            }
            Console.WriteLine(result);
            Console.ReadLine();
        }

        private static void Generator(int targetNum, int quintessence)
        {
            int q = targetNum / quintessence;
            int r = targetNum % quintessence;
            string t = "0123456789ABCDEF";

            rList.Add(t[r].ToString());
            if(q != 0)
            {
                Generator(q, quintessence);
            }
        }
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 101
python x 49
cs x 4
java x 19
cpp x 14
objectivec x 1
기 타 x 8
scala x 2
perl x 1
javascript x 2
ruby x 1