首页 > 试题广场 >

阿拉伯数字转中文

[编程题]阿拉伯数字转中文
  • 热度指数:2147 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个整数,请你输出这个整数的中文读法。
例如:
153,读作一百五十三
103,读作一百零三
1003,读作一千零三

数据范围:
示例1

输入

114514

输出

"十一万四千五百一十四"
示例2

输入

1000

输出

"一千"
示例3

输入

-1035

输出

"负一千零三十五"
package main
import (
    "strconv"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return string字符串
*/
func num2cn( n int ) string {
    digits := []string{
        "零", "一", "二", "三", "四", 
        "五", "六", "七", "八", "九", 
    }
    
    innerUnit := []string{
        "", "十", "百", "千",
    }
    outerUnit := []string{
        "", "万", "亿",
    }

    // 特殊case
    if n==0{
        return digits[0]
    }

    sign := 1
    if n<0{
        sign = -1
        n = -n
    }
    numStr := strconv.Itoa(n)


    var res string
    outerStep := 0
    for i:=len(numStr)-1;i>=0;{
        step := 0
        secNumStr := ""
        hasRightNonZero := false
        for step<4 && i>=0{

            //特殊case,0是否发音取决于后面还有没有非0数字
            if numStr[i]=='0' {
                if hasRightNonZero{
                    //多个0只留一个
                    for step<4 && i>=0 && numStr[i]=='0'{
                        step++
                        i--
                    }
                    secNumStr = digits[0] +secNumStr
                } else{
                    step++
                    i--
                }
                continue
            }

            hasRightNonZero = true

            //处理特殊case  整个part如果为12这种,应该读作十二,1不发音
            if step==1 && numStr[i]=='1' && i==0{
                secNumStr = innerUnit[step]  + secNumStr
            } else{ // 普通模式
                secNumStr = digits[numStr[i]-'0'] + innerUnit[step] + secNumStr
            }
            step++
            i--
        }
        //特殊case,整个part不发音,也就不能带单位了
        if secNumStr==""{
            //
        } else{
            res = secNumStr + outerUnit[outerStep] + res
        }
        
        outerStep++
    }

    if sign == -1{
        res = "负" + res
    }
    return res

}

发表于 2022-11-22 13:48:25 回复(0)
https://www.yuque.com/u21069870/ip39m8/gq5pyt 
体用一个 go 解法
发表于 2022-06-22 16:36:53 回复(0)