浏览 4743 次
锁定老帖子 主题:锻炼:把输入的一个自然数以大写方式显示
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-30
问题:将输入的不超过pow(2,31)-1的整数以大写方式显示
这种问题还很能锻炼编程基本功,大家来分析一下思路,给出你比较精炼的实现 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-09-30
搜狗输入就做了这个功能:v123456789就可以看的
|
|
返回顶楼 | |
发表时间:2008-09-30
每个位数上对应一个单位,应该不算很难的吧
|
|
返回顶楼 | |
发表时间:2008-09-30
发这个版没有不合适吧
.. 猛一抬头,发现我发的帖子旁边推荐了相关已经有类似的帖子了 http://www.iteye.com/topic/203097 不过还是有细节上的差异 |
|
返回顶楼 | |
发表时间:2008-10-01
除以10取余数,把余数push到一个stack里,一直递归下去直到商为0,然后从stack 一个个的pop出来,是0就输出"零"......
|
|
返回顶楼 | |
发表时间:2008-10-01
抱歉,看错题目了,还要输出亿千万百万这样的。不过稍微改动一下上面的不难实现,呵呵
|
|
返回顶楼 | |
发表时间:2008-10-01
public class NumberConvertor { static final char NUMBER_CHAR[] = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; static final char UNIT_CHAR[] = new char[] { '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟' }; public String convert(int number) { int remainingNumber = number; StringBuffer sb = new StringBuffer(); int pos = 0; int preDigit = -1; while (remainingNumber > 0) { int digit = remainingNumber % 10; if (isUnitToPrint(digit, preDigit, pos)) { sb.insert(0, UNIT_CHAR[pos - 1]); } if (isDigitToPrint(digit, preDigit, pos)) sb.insert(0, NUMBER_CHAR[digit]); pos++; preDigit = digit; remainingNumber = remainingNumber / 10; } return sb.toString(); } private boolean isDigitToPrint(int digit, int preDigit, int pos) { //个,万,亿的零不输出 if (digit == 0 && (pos == 0 || pos == 4 || pos == 8)) { return false; } //前后相邻,高位零不输出 if (digit == 0 && preDigit == 0) { return false; } return true; } private boolean isUnitToPrint(int digit, int preDigit, int pos) { //个位没有单位 if (pos == 0) { return false; } //万,亿必须输出 if (pos == 5 || pos == 9) { return true; } //零后不输出单位 if (digit == 0) { return false; } return true; } } |
|
返回顶楼 | |