这道题在笔试中还挺常见的,如果初次碰到还真没啥头绪。
但其实仔细想想也就四种情况:
1、数字为0
2、数字大于等于10
3、数字中间有多个0
4、个位数为0
处理好这四种情况即可解题

func toCN(num int) string {
	//1、数字为0
	if num==0{
		return "零"
	}
	var ans string
	//数字
	szdw:=[]string{"十","百","千","万","十万", "百万", "千万","亿"}
	//数字单位
	sz:=[]string{"零","一","二","三","四","五","六","七","八","九"}
	res:=make([]string,0)

	//数字单位角标
	idx:=-1
	for;num>0;{
		//当前位数的值
		x:=num%10
		//2、数字大于等于10
		// 插入数字单位,只有当数字单位角标在范围内,且当前数字不为0 时才有效
		if idx>=0&&idx<len(szdw)&&x!=0{
			res = append([]string{szdw[idx]},res... )
		}
		//3、数字中间有多个0
		// 当前数字为0,且后一位也为0 时,为避免重复删除一个零文字
		if x==0&&len(res)!=0&&res[0]=="零"{
			res=res[1:]
		}
		// 插入数字文字
		res = append([]string{sz[x]},res... )
		num/=10
		idx++
	}
	//4、个位数为0
	if len(res)>1 && res[len(res)-1]=="零"{
		res=res[:len(res)-1]
	}
	//合并字符串
	for i := 0; i < len(res); i++ {
		ans=ans+res[i]
	}
	return ans
}
Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐