中文数字转int

265 篇文章 1 订阅

异常的情况很多,但是正常情况这个是对滴。。。

 

 

用栈实现转化:
如果新读入的汉字(假设它代表的数字为N)比栈顶数字还要大
{
  弹出栈中所有比N小的元素,并将这些元素累加,假设结果为S;
  将S*N入栈;
}
否则
{
  将N直接入栈;
}
最后将栈中所有数字相加。

 

Exp:一亿一千二百五十八万三千二百四十(112,583,240)
第1步==>处理“一”,N=1
直接入栈,
此时栈中元素为:1 (右侧是栈顶)
第2步==>处理“亿”,N=100000000
弹出栈中唯一的元素,然后S=1,将S*N=100000000入栈
此时栈中元素为:100000000
第3步==>处理“一”,N=1
直接入栈
栈中元素为:100000000,1
第4步==>处理“千”,N=1000
弹出栈中比N小的元素(只有一个),然后S=1,将S*N=1000入栈
此时栈中元素为:100000000,1000
第5步==>处理“二”,N=2
直接入栈
此时栈中元素为:100000000,1000,2
第6步==>处理“百”,N=100
弹出栈中比N小的元素(只有一个),然后S=2,将S*N=200入栈
此时栈中元素为:100000000,1000,200
第7步==>处理“五”,N=5
直接入栈
此时栈中元素为:100000000,1000,200,5
第8步==>处理“十”,N=10
弹出栈中比N小的元素(只有一个),然后S=5,将S*N=50入栈
此时栈中元素为:100000000,1000,200,50
第9步==>处理“八”,N=8
直接入栈
此时栈中元素为:100000000,1000,200,50,8
第10步==>处理“万”,N=10000
弹出栈中比N小的元素(有四个),然后S=1258,将S*N=12580000入栈
此时栈中元素为:100000000,12580000

转自:

http://blog.csdn.net/zyr1984/article/details/5803786

后记:

这个题目和算术表达式求值(https://blog.csdn.net/taoqick/article/details/20722811)很像,就是把它parse成一个二叉树,父节点对应运算符,两个子节点对应两个数。如果无法保证输入是合法的,需要注意以下几点:

1. 中缀表达式的顺序是(数字,运算符,数字,运算符,数字,运算符,数字...),可以用这个节奏来判断是否是有效:

a. 对于算术表达式,需要注意-8要在FetchNum的时候拿到

b. 对于中文,需要注意“十”既是运算符也是数字

2. 对于中文,还有一些更特殊的情况:

a. 输入"零",意味着数字栈的相邻间隔要超过10倍,否则输入无效

b. 三十三千,进入栈的时候要判断是否大于千,这种是无效的。例如三十三千、六十六百

c. 只有亿是可以嵌套的,例如四亿亿

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值