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

大字への變換の 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("參拾", "卅");
}

.NET

Posted by Fujiwo