読者です 読者をやめる 読者になる 読者になる

プログラミング C# - 翔ソフトウェア (Sho's)

C#/.NET/ソフトウェア開発など

亞剌比亞數字の大字への變換

大字への變換の Sample Code を書いてみた。

例.

  • "0" → ""
  • "12,345" → "壹萬貳阡參佰肆拾伍"
  • "987,654,321" → "玖億捌阡柒佰陸拾伍萬肆阡參佰廿壹"
  • "122,090,654,002,030" → "壹佰廿貳兆玖佰陸億伍阡肆佰萬貳阡卅"
  • "34,500,000,000,128,034" → "參京肆阡伍佰兆壹拾貳萬捌阡卅肆"
  • "10,000,000,000,000,000,000" → "壹阡京"
// Source Code by C#
static string 大字への變換(string 亞剌比亞數字)
{
    亞剌比亞數字           = 亞剌比亞數字.Replace(",", "");
    ulong 數;
    if (!ulong.TryParse(亞剌比亞數字, out 數))
        throw new ArgumentException();
    var   數表現           = new { "", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };
    var   小位表現         = new { "", "拾", "佰", "阡" };
    var   大位表現         = new { "", "萬", "億", "兆", "京" };
    var   大位表現使用濟み = new { false, false, false, false, false };
    var   大字             = string.Empty;
    for (var 位 = 0; 數 != 0ul; 數 /= 10ul, 位++) {
        var 或る位の數 = (int)(數 % 10ul);
        if (或る位の數 != 0) {
            var 大位 = 位 / 4;
            if (大位 >= 大位表現.Length)
                throw new OverflowException();
            if (!大位表現使用濟み[大位]) {
                大字                   = 大位表現[大位] + 大字;
                大位表現使用濟み[大位] = true;
            }
            大字 = 數表現[或る位の數] + 小位表現[位 % 4] + 大字;
        }
    }
    return 大字.Replace("貳拾", "廿").Replace("參拾", "卅");
}