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);
}
}
}