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
转载:https://blog.csdn.net/mp624183768/article/details/111396038
查看评论