解题思路:
将读入的数字从后往前数,每四个划为一组,数字长度不够4整除的前补0使之刚好被4整除 如:1234567009,即被分成了0012,3456,7009三组 其中,第一组(从左往右数)的单位是"yi"(亿),第二组的单位是"wan"(万)(第三组的单位是1,可以不包含在结果里) 然后每组分开读数,指针i初始化指向左边第一个非零数字,依次往后扫描 对于每一组,都有如下情况: ①i%4 = 0时,处在"qian"(千)位,非0时,读出数字,再追加一个"qian" ②i%4 = 1时,处在"bai"(百)位,非0时,读出数字,再追加一个"bai" ③i%4 = 2时,处在"shi"(十)位,非0时,读出数字,再追加一个"shi" ④i%4 = 3时,处在个位,如果是0,不用读出来,如果非0,读出数字;最后不要忘了,再追加该组的单位(第三组可以不加) 大体思路就是这样,还有些细节部分没细说(如连续零的处理,"yi shi"和"shi"的处理等),大家可以直接看代码部分
注意事项:
1.一般情况下,连续的零只需读出一个(特殊情况下,即使有连续的零也不需要读出,如1000003000(shi yi san qian))
2.shi还是yi shi的处理
3.末尾可以有一个多余的空格
参考代码:
import java.util.Scanner; public class T1469 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String digit[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; while(in.hasNext()) { String n = in.next(); int cnt = n.length()%4; String tmp[] = {"0000","000","00","0"}; n = tmp[cnt]+n; //把输入的数字拼成4的整数倍长度 String ans = ""; int nzero = 0; //记录连续0的个数 for(int i =4-cnt;i<n.length();i++) {//4-cnt可定位到输入数字的第一位 if(n.charAt(i) != '0') { //遇到第一个非零数字,且有多个连续的0,且非零数字不在下一组的第一个位置,只需读出一个0 if(nzero>0 && i%4 != 0) ans += "ling "; nzero = 0; if(i%4==0) //千位 ans += digit[n.charAt(i)-'0'] + " qian "; else if(i%4==1) //百位 ans += digit[n.charAt(i)-'0'] + " bai "; else if(i%4==2) //十位 ans += digit[n.charAt(i)-'0'] + " shi "; else //个位 ans += digit[n.charAt(i)-'0'] + " "; } else nzero++; if(n.length() - i == 5 && nzero < 4)//如果位于万位上且这一组的四个数字不全为0,需要加“wan” ans += "wan "; else if(n.length() - i == 9)//如果位于亿位上,需要加“yi” ans += "yi "; } if(ans.indexOf("yi shi") == 0) //"yi shi"开头的话要去掉"yi " ans = ans.substring(3,ans.length()); System.out.println(ans); } in.close(); } }
0.0分
17 人评分
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:543 |
C语言训练-角谷猜想 (C语言代码)浏览:1768 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:910 |
WU-复数求和 (C++代码)浏览:2119 |
众数问题 (C语言代码)浏览:911 |
妹子杀手的故事 (C语言代码)浏览:1153 |
勾股数 (C语言代码)浏览:830 |
输出九九乘法表 (C语言代码)浏览:1172 |
整数平均值 (C语言代码)浏览:856 |
敲七 (C++代码)浏览:1119 |