プログラム問題集

プログラム問題集

多分プログラミングの問題集でも書いていく

進数変換

問題

 入力された値を2~32進数に変換しましょう。


入力
・入力する値nは0から10000までの範囲
・0未満、10001以上は再入力を求める
・整数値以外は再入力を求める


出力
・入力値nを2進数から32進数までそれぞれ変換したものを表示する


数字
・数字は次のものを使用します
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

値を入力してください(0~10000)
35
2進数:100011
3進数:1022
4進数:203
5進数:120
6進数:55
7進数:50
8進数:43
9進数:38
10進数:35
11進数:32
12進数:2b
13進数:29
14進数:27
15進数:25
16進数:23
17進数:21
18進数:1h
19進数:1g
20進数:1f
21進数:1e
22進数:1d
23進数:1c
24進数:1b
25進数:1a
26進数:19
27進数:18
28進数:17
29進数:16
30進数:15
31進数:14
32進数:13
解答例

C#

using System;

namespace bit
{
    class Program
    {
        static void Main(string[] args)
        {
            OriginalConvert oc = new OriginalConvert();

            int n = InputNumber();

            for (int i = 2; i <= 32; i++)
            {
                Console.WriteLine("{0}進数:{1}", i, oc.ToString(n, i));
            }
        }

        /// <summary>
        /// 数値入力
        /// </summary>
        /// <returns>入力値</returns>
        static int InputNumber()
        {
            bool loop = true;
            int n;

            do
            {
                Console.WriteLine("値を入力してください(0~10000)");
                String s = Console.ReadLine();
                loop = !int.TryParse(s, out n);
                if ((n < 0) | (n > 10000)) loop = true;
            } while (loop);

            return n;
        }
    }

    /// <summary>
    /// OriginalConvertクラス
    /// </summary>
    public class OriginalConvert
    {
        //32文字の数字を格納する配列
        //0123456789
        //abcdefghij
        //klmnopqrst
        //uv
        private char[] numChar;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public OriginalConvert()
        {
            numChar = new char[32];

            //配列に数字を格納
            for (int i = 0; i <= 9; i++)
            {
                numChar[i] = (char)(i + 48);
            }
            for (int i = 10; i < 32; i++)
            {
                numChar[i] = (char)((i - 10) + 97);
            }
        }

        /// <summary>
        /// 進数変換
        /// </summary>
        /// <param name="value">整数値</param>
        /// <param name="toBase">基数</param>
        /// <returns>進数変換後の値(文字列)</returns>
        public string ToString(int value, int toBase)
        {
            string s = string.Empty;

            do
            {
                int q = value % toBase;
                value = value / toBase;

                s += numChar[q];

            } while (value != 0);

            return Reverse(s);
        }

        /// <summary>
        /// 文字列の逆転
        /// </summary>
        /// <param name="s">文字列</param>
        /// <returns>逆転文字列</returns>
        private string Reverse(string s)
        {
            string str = String.Empty;

            for (int i = s.Length - 1; i >= 0; i--)
            {
                str += s[i];
            }

            return str;
        }

    }
}