1、把 str 从右到左拆分成 4 位一组,就是 “ 12 亿 3456 万 7009 ” 这样的形式。“ 几千几百几十几 ” 这样4位一组的形式比较好读,读完加上单位 “亿” “万” 即可,考虑到一般情况,最左边的一组可能不足 4 位,不足 4 位的需要单独处理
2、由于这道题需要判断的地方太多了,详细解题思路我就不细说了,大家可以自己多举几个例子,然后参考下面的程序慢慢梳理思路
(一点儿小牢骚):针对这道题,我发现蓝桥杯的测评数据不够全面,我刚开始写了一个考虑不够全面的算法程序提交上去都是 100 分,对此我很是无语。而且,通过近段时间做的这么些题,我发现蓝桥杯对输出数据的显示格式要求也不是很严格,特别是在行末空白字符的处理上,多一个少一个似乎都没有多大关系。综合这些,我只能说蓝桥杯跟ACM相比,还是有差距的啊!
import java.util.Scanner; public class Main { static String[] unit = { "", "", "wan ", "yi " }; static String[] digit = { "", "", "shi ", "bai ", "qian " }; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String str = scanner.nextLine(); char[] chs = str.toCharArray(); int len = chs.length; int index = 0;// 记录chs数组的下标 int group = (len - 1) / 4 + 1;// 4位一组 int rest = len % 4;// 最左边的可能不足四位,需要单独处理 String spell; StringBuffer result = new StringBuffer(); if (rest != 0) { if (rest == 2) { if (chs[index] == '1') { result.append("shi "); } else { spell = getSpelling(chs[index]); result.append(spell + "shi "); } index++; if (chs[index] != '0') { result.append(getSpelling(chs[index])); } index++; } else { boolean flag = true; for (int i = rest; i > 0; i--) { char ch = chs[index++]; if (ch != '0') { spell = getSpelling(ch); if (flag) { result.append(spell + digit[i]); } else { result.append("ling " + spell + digit[i]); } } else { flag = false; } } } result.append(unit[group--]); } for (int i = group; i > 0; i--) { boolean flag = true; for (int j = 4; j > 0; j--) { char ch = chs[index++]; if (ch != '0') { spell = getSpelling(ch); if (flag) { result.append(spell + digit[j]); } else { result.append("ling " + spell + digit[j]); flag = true; } } else { flag = false; } } result.append(unit[group--]); } result.deleteCharAt(result.length() - 1); System.out.println(result); } } private static String getSpelling(char c) { String spell = null; switch (c) { case '0': spell = "ling "; break; case '1': spell = "yi "; break; case '2': spell = "er "; break; case '3': spell = "san "; break; case '4': spell = "si "; break; case '5': spell = "wu "; break; case '6': spell = "liu "; break; case '7': spell = "qi "; break; case '8': spell = "ba "; break; case '9': spell = "jiu "; break; } return spell; } }
[BASIC-20] 数的读法,布布扣,bubuko.com
原文:http://blog.csdn.net/u011506951/article/details/26442861