蓝桥杯javaC组——基础练习题【数的读法】(3)
【摘要】 【代码】补充ps:当数为10001000时,规范的读法是一千万一千,而题意是中间有零或多个零的情况下只读一个零,所以不用考虑这种情况import java.util.Scanner; public class Main { public static void main(String[] args) { //数的读法 Scanner input = new Scann...
【代码】
补充ps:
当数为10001000时,规范的读法是一千万一千,而题意是中间有零或多个零的情况下只读一个零,所以不用考虑这种情况
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//数的读法
Scanner input = new Scanner(System.in);//创建输入流
String numStr = input.next();//接收字符串数据
input.close();//关闭输入流
//定义两个字符串数组来存储数字和数字的单位
String[] shuzi = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ", "qi ", "ba ", "jiu "};
//两个null:第一个是让数组下标从1开始,故把索引0赋值null;
//第二个是个位,题中不用打印个位,故赋值null;为的就是让单位下标和数位对应上
String[] danwei = {"", "", "shi ", "bai ", "qian ", "wan ", "shi ", "bai ", "qian ", "yi ", "shi ", "bai ", "qian "};
char[] charArray = numStr.toCharArray();//将字符串转化为字符数组
int len1 = charArray.length;//把长度赋值给一个变量,因为接下来要运算,而数组长度是固定不变的
for(int i = 0; i < len1; i++) {//开始for循环,从高位到个位
int num = numStr.charAt(i) - '0';//把字符变成数字变量
if(num == 0) {//有0的情况,单位要在0的前面打印,所以先打印单位,如101000(十万零一千)为 shi wan ling yi qian
//0在亿位(单位下标为9);
//0在万位(单位下标为5),而且前三位有不为0的数字存在,那么打印万单位
boolean b = len1-i == 9 || len1-i == 5 && (charArray[i-1] != '0' || charArray[i-2] != '0' || charArray[i-3] != '0');
if(b) {
System.out.print(danwei[len1-i]);
}
//两个非0数字中间的许多0的最后一个0读“ling”,比如10001那三个0的最后一个读“ling”
//【i < len1-1】是为了防止数组下标越界异常
if(i < len1-1 && charArray[i + 1] != '0') { //0至少是十位以上的,如果连续零,且连续到个位上,那就不读数字和单位
System.out.print("ling ");
}
}else {
//数字1出现在下标:10-十亿位、6-十万位、2-十位;不读1;
//10、10万、10亿这三种情况的特殊读法
if(num == 1 && (len1-i == 10 || len1-i == 6 || len1-i == 2)) {
// System.out.print(danwei[len1-i]);
System.out.print("shi ");
}else {
//没有特殊条件,直接打印对应数字和单位的拼音
System.out.print(shuzi[num]);
System.out.print(danwei[len1-i]);
}
}
}
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)