1. 阿拉伯數目字轉換國字大寫數字
快速寫法,基本上在亂寫,但結果正確。
# 注意處理 0 = 零 的 edge-case
0 = 零 的 edge-caseprivate string toNum(long n)
{
string[] k =
{
"零",
"壹",
"貳",
"叄",
"肆",
"伍",
"陸",
"柒",
"捌",
"玖"
};
string res = "";
long z = n % 10;
n /= 10;
long ten = n % 10;
n /= 10;
long hundred = n % 10;
n /= 10;
long kilo = n % 10;
long[] arr = { kilo, hundred, ten, z };
string[] srr = { "仟", "佰", "拾", "" };
bool zero = false;
bool firstNonZero = false;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] != 0)
{
res += k[arr[i]] + srr[i];
zero = false;
firstNonZero = true;
}
else
{
if (!zero && firstNonZero)
{
res += k[0];
zero = true;
}
}
}
if (kilo == 0)
{
res = "零" + res;
}
if (res.EndsWith("零")) res = res.Substring(0, res.Length - 1);
return res;
}
private void button1_Click(object sender, EventArgs e)
{
var n = long.Parse(textBox1.Text);
var len = $"{n:0}".Length;
if (len >= 14 || len <= 0 || n < 0)
{
wtf.Text = "超過範圍,請重新輸入";
return;
}
n3.Text = $"{n:###,##0}";
long z = n % 10000;
n /= 10000;
long wan = n % 10000;
n /= 10000;
long yi = n % 10000;
n /= 10000;
long zao = n % 10000;
string res = "";
long[] arr = { zao, yi, wan, z };
string[] srr = { "兆", "億", "萬", "" };
for (int i = 0; i < arr.Length; i++)
{
if (i > 0 && arr[i] == 0) res += "零";
if (arr[i] != 0)
{
res += toNum(arr[i]) + srr[i];
}
}
while (res.StartsWith("零")) res = res.Substring(1); // 笑死,我在幹嘛
while (res.Contains("零零")) res = res.Replace("零零", "零");
if (res.EndsWith("零")) res = res.Substring(0, res.Length - 1);
if (res.Length == 0) res = "零";
wtf.Text = res;
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = "";
n3.Text = "";
wtf.Text = "";
}Last updated