蓝桥杯javaC组——基础练习题【数的读法】(3)

举报
发表于 2022/02/21 22:24:53 2022/02/21
【摘要】 【代码】补充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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。