1. 阿拉伯數目字轉換國字大寫數字

快速寫法,基本上在亂寫,但結果正確。

# 注意處理 0 = 零 的 edge-case

private 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