数的读法(详解) 蓝桥杯java
题目描述:
Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿。
比如说,在对学生讲解第1234567009号位置上的碱基时,光看着数字是很难准确的念出来的。
所以,他迫切地需要一个系统,然后当他输入12 3456 7009时,会给出相应的念法:
十二亿三千四百五十六万七千零九
用汉语拼音表示为
shi er yi san qian si bai wu shi liu wan qi qian ling jiu
这样他只需要照着念就可以了。
你的任务是帮他设计这样一个系统:给定一个阿拉伯数字串,你帮他按照中文读写的规范转为汉语拼音字串,相邻的两个音节用一个空格符格开。
注意必须严格按照规范,比如说“10010”读作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”读作“shi wan”而不是“yi shi wan”,“2000”读作“er qian”而不是“liang qian”。
输入:
有一个数字串,数值大小不超过2,000,000,000。
输出:
是一个由小写英文字母,逗号和空格组成的字符串,表示该数的英文读法。
样例输入:
1234567009
样例输出:
shi er yi san qian si bai wu shi liu wan qi qian ling jiu
思路分析:
- 首先创建一个 split 方法,将输入的所有数字从后往前分割成四位一组
- 创建一个 f1( ) 方法,可以按照普通方式直接将数读出来
- 创建一个 f2( )方法,可以将所有的被分割过的四位数按照f1( )方法读出来后连接起来
- 创建一个deal ( )方法,对不合规范的读法进行修改。
一:
- 将输入的字符串 str 分割成字符串数组 arr[ ] ,数组的长度为:
(1)if(str.length%4==0) ---->arr.length = str.length/4
(2)arr.length = str.length/4+1
- 分割成的字符串数组arr[0] 为最前面的小于或等于四位的数;arr[arr.length-1]为最后面的四位数。
public static String[] splitS(String s) {//将数字字符串分割成新的字符串数组
int group = 0;
if(s.length()%4==0) {
group = s.length()/4;
}else {
group = s.length()/4+1;
}
String[] res = new String[group];
for(int i=group-1;i>0;i--) {
res[i] = s.substring(s.length()-4,s.length());
s = s.substring(0, s.length()-4);
}
res[0] = s;
return res;
}//返回输入的字符串切割之后的数组
二:
- 创建 f1( ) 方法时,要求可以将分割后的数读出来,可能由一位数的、两位的、三位的、四位的。并且要求是用普通方法,最后统一修改。(当然大佬们可以忽略我的文章)
- 由于是用拼音表示,则0对应ling,创建类变量字符串数组
static String str[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"},则
public static String f1(String s) {//能把一个四位数读出来
String res = "";
if(s.length()==1) {
res =str[s.charAt(0)-48];
}else if(s.length()==2) {
res = str[s.charAt(0)-48]+" shi "+str[s.charAt(1)-48];
}else if(s.length()==3) {
res = str[s.charAt(0)-48]+" bai "+str[s.charAt(1)-48]+" shi "+str[s.charAt(2)-48];
}else if(s.length()==4) {
res = str[s.charAt(0)-48]+" qian "+str[s.charAt(1)-48]+" bai "+str[s.charAt(2)-48]+" shi "+str[s.charAt(3)-48];
}
return res;
}
三:
- 创建 f2( ) 方法,将所有的分割的字符串连接起来。
- 判断:如果字符串数组长度为1,则所有的字符串连接起来仍为他本身;如果字符串数组长度为2,则中间用“wan”连接;如果长度为3,则用“yi”、“wan”连接。
public static String f2(String[] arr) {//能把读数连在一起
String s = "";
if(arr.length ==1) {
s = f1(arr[0]);
}else if(arr.length == 2) {
s = f1(arr[0])+" wan "+f1(arr[1]);
}else if(arr.length == 3) {
s = f1(arr[0])+" yi "+f1(arr[1])+" wan "+f1(arr[2]);
}
return s;
}
四:
- 当对四位数读数时:ling qian -->ling ; ling bai -->ling ; ling shi --> ling ; ling ling-->ling ;
- 连接后的字符串开头为 yi shi 时,变为 shi
- 结尾有 ling 时,省去空格+ling ,共5个字符
- 对于“ling ling -->ling”,需要循环,只要还有ling ling ,则还需改变
public static String deal(String s) {//在所有数连接好之后开始处理非法字符
s = s.replace("ling wan", "wan");
s = s.replace("ling qian","ling");//开头为零
s = s.replace("ling bai", "ling");
s = s.replace("ling shi","ling");
while(s.contains("ling ling")) {
s = s.replace("ling ling", "ling");
}
if(s.endsWith("ling"))
s = s.substring(0, s.length()-5);//因为最后为ling,不用读,删去时需要删空格+ling,共五个字符
if(s.startsWith("yi shi")) {
s = s.replace("yi shi", "shi");
}
return s;
}
总代码如下:
package day2_28;import java.util.Scanner;public class Main1496true {static String str[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.next();String[] arr = splitS(s);//分割后的新字符串String zongzifu = "";zongzifu = f2(arr);System.out.println(deal(zongzifu));}public static String[] splitS(String s) {//将数字字符串分割成新的字符串数组int group = 0;if(s.length()%4==0) {group = s.length()/4;}else {group = s.length()/4+1;}String[] res = new String[group];for(int i=group-1;i>0;i--) {res[i] = s.substring(s.length()-4,s.length());s = s.substring(0, s.length()-4);}res[0] = s;return res;}//返回输入的字符串切割之后的数组public static String deal(String s) {//在所有数连接好之后开始处理非法字符s = s.replace("ling wan", "wan");s = s.replace("ling qian","ling");//开头为零s = s.replace("ling bai", "ling");s = s.replace("ling shi","ling");while(s.contains("ling ling")) {s = s.replace("ling ling", "ling");}if(s.endsWith("ling"))s = s.substring(0, s.length()-5);//因为最后为ling,不用读,删去时需要删空格+ling,共五个字符if(s.startsWith("yi shi")) {s = s.replace("yi shi", "shi");}return s;}public static String f1(String s) {//能把一个四位数读出来String res = "";if(s.length()==1) {res =str[s.charAt(0)-48];}else if(s.length()==2) {res = str[s.charAt(0)-48]+" shi "+str[s.charAt(1)-48];}else if(s.length()==3) {res = str[s.charAt(0)-48]+" bai "+str[s.charAt(1)-48]+" shi "+str[s.charAt(2)-48];}else if(s.length()==4) {res = str[s.charAt(0)-48]+" qian "+str[s.charAt(1)-48]+" bai "+str[s.charAt(2)-48]+" shi "+str[s.charAt(3)-48];}return res;}public static String f2(String[] arr) {//能把读数连在一起String s = "";if(arr.length ==1) {s = f1(arr[0]); }else if(arr.length == 2) {s = f1(arr[0])+" wan "+f1(arr[1]);}else if(arr.length == 3) {s = f1(arr[0])+" yi "+f1(arr[1])+" wan "+f1(arr[2]);}return s;}}
数的读法(详解) 蓝桥杯java相关推荐
- PCF8591详解(蓝桥杯单片机模块(IIC总线))
文章目录 概述 特性 总体 框图 引脚 功能描述 寻址 控制字节 D/A转换 D/A转换过程 A/D转换 A/D转换过程 蓝桥杯部分 原理图部分 AD部分 DA部分 结束 概述 PCF8591是一款单 ...
- AT24C02详解(蓝桥杯单片机模块(IIC总线))
文章目录 特性 描述 引脚描述: 存储组织: 设备操作(IIC) 设备地址 写操作 字节写: 页写入: 确认轮询: 读操作 确认轮询: 当前地址读取: 任意地址读: 连续顺序读: 蓝桥杯部分 特性 2 ...
- DS1302详解(蓝桥杯单片机模块)
文章目录 特性 详细描述 命令字节 CE 数据输入 数据输出 突发模态 时钟\日期 时钟停止标志 写保护 时钟\日期突发模式 RAM突发模式 数据传输 蓝桥杯部分 输出 特性 实时时钟计算秒.分.小时 ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...
- 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2019年 第10届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
最新文章
- 3个月300个VR“体验馆”?张近东这句大话靠谱么?
- 手把手教你撸一个简易的 webpack
- AI修复技术为何这么强?原来背后的技术是……
- 24小时删!看完这17个超牛逼大数据视频让你妥妥进大厂!(限时领)
- PHP银行卡信息基类大全
- oracle财务软件凭证打印,ORACLE财务软件简明操作文档.doc
- 2019春 总结作业
- R: ggplot2图片的布局排版
- LAN9252采用外部阻容复位的时候,RESET引脚一直为低的原因以及对应解决办法。
- H5播放B站源的flv视频
- FPGA数字信号处理(1)- AM调制的FPGA实现
- 安卓非微信内置浏览器中的网页调起微信支付的方案研究
- 如何安装计算机刻录程序,详解怎么用电脑刻录光盘
- OpenStack核心组件原理与应用之Glance
- C#语言实例源码系列-实现动态图标闪烁显示
- 大数据的4v特征、数据预处理
- 湛江C语言培训,湛江c语言编程学习,湛江学c语言编程报班,湛江学c语言编程自学好还是报班好...
- 操作必须使用一个可更新的查询问题
- moxa串口服务器网页访问失败,moxa串口服务器连接设置
- TIA Portal(博途)弹出安装重启窗口的解决方法
热门文章
- Siemens_NX2306.1700_20230618(免安装)
- 计算机毕业设计springboot新能源汽车产业链分析系统q997c9[附源码]
- JavaWeb应用开发------校园二手平台
- C++程序设计:股票的最大波动
- 【Linux】初窥Linux 之 我最常用的20条命令
- element-ui表单input输入框获取自动聚焦功能
- 如何用Python制作一个动态爱心效果
- 哈工大计算机系统-这不是小作业,也就中等作业吧
- sql语句中BEGIN TRAN...COMMIT TRAN
- 毕设文案 赠源码28265-django 电子档管理系统