進数変換
問題
入力された値を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
解答例
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; } } }