将数字转换为汉字,Python/C++三种方式实现
题目:
请实现一个函数, 输入一个小于100000000(一亿)的自然数,并在屏幕上打印这个数字的中文写法。(20分)
不同时间段不同实现
1. 24年c++实现:
string numToChinese(int num) { //数字转汉字
string result = "";
vector<string> chins = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
vector<string> measures = { "","拾", "佰","仟"};
vector<string> measures2 = { "","万", "亿" ,"万亿"};
int length = 0;
for (int i = 1; i <= num; i*=10) {
length++;
}
cout << length << endl;
int zero_count = 0;
for (int i = length-1, new_num=num; i > 0; i--) {
int t = pow(10, i);
int inte = new_num / t; //整数部分
int rema = new_num % t; //余数部分
new_num = rema;
if (inte == 0) {
zero_count++;
if ((i) % 4 == 0) {
result += measures2[(i) / 4]; //measures2
zero_count = 0;
}
continue;
}else {
if (zero_count >0) {
result += chins[0];
}
result += chins[inte];
result += measures[i % 4]; //measures
if ((i) % 4 == 0) {
result += measures2[(i) / 4]; //measures2
}
zero_count=0;
}
if (i == 1&& inte!=0) {
result += chins[rema];
}
}
return result;
}
2. 20年Python实现
num=input()
num=str(num)
w=['零','一','二','三','四','五','六','七','八','九']
n=['千','百','十','','千','百','十','']
#100000000
def trans(num):
lengt=len(num)
if lengt>8:
return "超出大小"
str=''
islastIsEro=False
i=0
while i<lengt:
#print(num[i])
tmp=int(num[i])
if tmp==0:
if islastIsEro != True:
str+=w[tmp]
#str+=n[8-lengt+i]
islastIsEro = True
if lengt-i==5:
if islastIsEro == True:
str=str[:-1]
str+='万'
else :
str+=w[tmp]
str+=n[8-lengt+i]
islastIsEro=False
if lengt-i==5:
if islastIsEro == True:
str=str[:-1]
str+='万'
i+=1
if str[-1]==w[0]:
str=str[:-1]
return str
print(trans(num))
3. 18年Python实现:
#!/usr/bin/env python
# coding=utf-8
countStr=["","万","亿","","千","百","十",""]
numberStr=["零","一","二","三","四","五","六","七","八","九"]
num=10100000
def numToStr(number):
nu=str(number)
string=""
i=1
iszero=0
flag=0
iscount=0
while i<=len(nu):
buf=""
if nu[-i]!="0":
if i%4==0:
buf=numberStr[int(nu[-i])]+countStr[-4]
else:
buf=numberStr[int(nu[-i])]+countStr[-(i%4)]
if (i-1)%4==0 :
buf=buf+countStr[(i-1)//4]
if iszero==1 and flag==1 and iscount==0:
if nu[-i]!="0"or (i-1)%4==0:
buf=buf+numberStr[0]
iszero=0
if (i-1)%4==0:
iscount=1
if nu[-i]=="0" :
iszero=1
else:
flag=1
iscount=0
iszero=0
string=buf+string
i+=1
return string
a=input("输入一个数字")
#a=input("in")
a=str(a)
print(numToStr(a))