python 解法
# 将结尾的0 全部替换为# 比如 100 就是1## 但是 10100 则是101##
def getNoEndZeroStr(originStr):
noEndStr = originStr.rstrip("0")
# 确实有被替换的0
hasEndZeroSize = len(originStr) - len(noEndStr)
if (hasEndZeroSize > 0):
return noEndStr + "#" * hasEndZeroSize
return noEndStr
pass
def getNumberForStr(strNumber):
if (strNumber == "" or strNumber == None):
print("数据不能为空")
return
# 不能转换为数字
if not strNumber.isnumeric():
print("数据格式不正确")
resByByFloat = 0;
try:
resByByFloat = float(strNumber)
except Exception as ex:
# 打印错误并且返回
print('输入的字符串不能转换位float ERROR: ' + str(ex))
return
if strNumber.__contains__("."):
print("暂时不支持浮点运算")
return
if strNumber.__contains__("-") or strNumber.__contains__("——"):
print("暂时不支持负数运算")
return
dictByNumber = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
dictByDigits = ["", "十", "百", "千", "万"]
# 针对0做特殊处理
if resByByFloat == 0:
return dictByNumber[0]
# 开头如果为0的话 过滤掉
noStratZeroStr = strNumber.lstrip("0")
# 将字符串转化为字符串数组
strNumberList = list(noStratZeroStr)
# 根据当前位数与字典位数对比
if len(strNumberList) > len(dictByDigits):
print("数据太大了,暂时不支持")
return
# 根据数字大小截取正确的顺序
dictByDigits = dictByDigits[0:len(strNumberList)]
dictByDigits.reverse()
# 过滤结尾的0 并用#字符串代替
noEndZerostr = getNoEndZeroStr(noStratZeroStr)
# 过滤中间的0 如果是两个0 就用1个0代替 10001 10**1
hasOneCenter = noEndZerostr.replace("0", "@")
resStr = ""
isAddCenterZero = False
# 核心逻辑 倒叙添加最后反转字符串
for index in range(len(strNumberList)):
# 结尾是#号的代表 代表结尾是0 所以跳过
if (noEndZerostr[index] == "#"):
continue
# 过滤中间的0
if (hasOneCenter[index] == "@"):
# 后续如果不是数字 符号不要
if (not isAddCenterZero):
resStr += dictByNumber[int(strNumberList[index])]
isAddCenterZero = True
continue
# 解决 10101
if (index > 0 and hasOneCenter[index - 1] == "@" and hasOneCenter[index] != "@"):
isAddCenterZero = False
resStr += dictByNumber[int(strNumberList[index])] + dictByDigits[index]
pass
# 中间有连续多个零,只取一个零
return resStr
def printRes(strNumber):
res = getNumberForStr(strNumber)
print(strNumber + ":" + res)
def main():
for x in getContainsZeroAndOneNumber():
printRes(str(x))
pass
# 拿到所有从0到9万9千中包含0和1的数字
def getContainsZeroAndOneNumber():
list=[]
for x in range(99999 + 1):
strNumber = str(x)
if not strNumber.replace("0","").replace("1",""):
list.append(x)
return list
if __name__ == '__main__':
main()
结果输出
D:\devlop\python\python.exe D:/project/python/market/pic/main_number.py
0:零
1:一
10:一十
11:一十一
100:一百
101:一百零一
110:一百一十
111:一百一十一
1000:一千
1001:一千零一
1010:一千零一十
1011:一千零一十一
1100:一千一百
1101:一千一百零一
1110:一千一百一十
1111:一千一百一十一
10000:一万
10001:一万零一
10010:一万零一十
10011:一万零一十一
10100:一万零一百
10101:一万零一百零一
10110:一万零一百一十
10111:一万零一百一十一
11000:一万一千
11001:一万一千零一
11010:一万一千零一十
11011:一万一千零一十一
11100:一万一千一百
11101:一万一千一百零一
11110:一万一千一百一十
11111:一万一千一百一十一
Process finished with exit code 0