using System; using System.Collections.Generic; using System.Linq; namespace CSharpProject { /// /// 単なる数値で表された金額を硬貨、札で表現しなおすクラス。 /// public class Mony { //内部用の機械的アクセス用。 private int[] datas = new int[9]; public int One { get { return datas[0]; } private set { datas[0] = value; } } public int Five { get { return datas[1]; } private set { datas[1] = value; } } //10 public int Ten { get { return datas[2]; } private set { datas[2] = value; } } public int Fifty { get { return datas[3]; } private set { datas[3] = value; } } public int Hundred { get { return datas[4]; } private set { datas[4] = value; } } public int FiveHundred { get { return datas[5]; } private set { datas[5] = value; } } //1,000 public int Thousand { get { return datas[6]; } private set { datas[6] = value; } } public int FiveThousand { get { return datas[7]; } private set { datas[7] = value; } } //10,000 public int TehThousand { get { return datas[8]; } private set { datas[8] = value; } } private int intValue; /// /// このクラスを初期化します。 /// /// 金額 public Mony(int value) { ParseInt(value); } /// /// intをパースしてMonyクラスにセットする /// /// private void ParseInt(int num) { //Array.Clear(datas, 0, datas.Length); intValue = num; for (int i = 1; i <= Math.Min(4, (int)Math.Log10(num) + 1); i++) { var value = GetDigitValue(num, i); if (value >= 5) { datas[(i - 1) * 2] = value - 5; datas[(i - 1) * 2 + 1]++; } else { datas[(i - 1) * 2] = value; } } TehThousand = num / 10000; } /// /// intの任意の桁の値を取得します。 /// /// 下から数えた取得したい桁数 /// 取得する元の数値 private int GetDigitValue(int num, int digit) { int numDighit = (int)Math.Log10(num) + 1; if (numDighit < digit || digit < 0) throw new ArgumentException("digit"); for (int i = numDighit; i > digit; i--) { //消去したい桁数 int deleateDigiht = (int)Math.Pow(10, (int)Math.Log10(num)); //ex:4321→4→4000 num -= num / deleateDigiht * deleateDigiht; } if (digit == 1) return num; return num / (int)Math.Pow(10, digit - 1); } /// /// この構造体をintに変換します。 /// /// public int ToInt32() { return intValue; } } class Program { public static void Main() { //お釣り var m = new Mony(1234986); var s = string.Format("10,000yen>{0},5,000yen>{1},1,000yen>{2},500yen>{3},100yen{4},50yen>{5},10yen>{6},5yen>{7},1yen>{8}", m.TehThousand, m.FiveThousand, m.Thousand, m.FiveHundred, m.Hundred, m.Fifty,m.Ten, m.Five, m.One); Console.WriteLine(s); } } }