java面试题,输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。
今天面试了一家公司,面试的Java初级开发,实习的岗位。面试题也都挺简单的,给了四道题,让我挑一道做。我就选了第一道:
输入一串数字,输出其大写金额,
如:123
输出:壹佰贰拾叁整
之前一直在搞自己的服务器,外加一个月没碰java了,在准备考公务员,面试的时候突然发现自己啥都忘了,差点连最基础的Scanner都写不出了。
现在回来我好好写一下这个代码,当时在哪里只写到了万位以后的
让我们来先分析一下
输出大写金额,这个第一个想到的就是switch-case
然后就是数位,举个例子123
我们要输出壹佰贰拾叁,那就要从左到右,先是壹,百位,二,十位,三,整
这就需要我们判断一次数字在判断一下数位,
再来个例子,10000和10086
我们这次要输出壹万整 和 壹万零捌拾陆整
这个逻辑就是我们要判断 :
if(前一个数字是否为零&&当前数字不为零){
输出(“零”+数字+数位)
}
输出数字;
输出数位;
下面我们代码实现这个逻辑
/*** 输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。* * @param args*/public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入一串数字");String num = input.nextLine();// for循环中尽量不要用String +=的方式拼接,可以用StringBuilderboolean perviousIsZero = false;StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < num.length(); i++) {int a = num.charAt(i);// 判断当前是否为零if (a == 48) {perviousIsZero = true;continue;}// 判断数字前一个是否是零且当前数字不为零if (perviousIsZero) {if (a != 48) {stringBuilder.append("零");perviousIsZero = false;} else {// 都是零就跳过continue;}}// 获取数字大写stringBuilder.append(getUpperCase(a));// 获取数位stringBuilder.append(getDigitPlace(num.length() - i));}System.out.println(stringBuilder.toString() + "整");}/*** 获取数位* * @param i* @return*/private static String getDigitPlace(int i) {switch (i) {case 2:case 6:case 10:return "拾";case 3:case 7:case 11:return "佰";case 4:case 8:case 12:return "仟";case 5:case 13:return "万";case 9:return "亿";default:return "";}}/*** 输出数字的大写* * @param a* @return*/private static String getUpperCase(int a) {switch (a) {case 49:return "壹";case 50:return "贰";case 51:return "叁";case 52:return "肆";case 53:return "伍";case 54:return "陆";case 55:return "柒";case 56:return "捌";case 57:return "玖";default:return "";}}
我们运行一下看看
输出都正常,那我们看看长一点的
这里十万亿位出现了错误,是因为我们switch case只写到了第13位数,超出
了我们默认就没有数位了。所以这里还有地方可以优化。
这里单位有问题,不应该用万亿这个单位,千亿后面就是兆了,所以一般差不多计算到千亿就可以了,再往后就没太大意义了
其实做这个题的时候发生了两件挺尴尬的事情,我第一眼看到这个题的时候,我还以为只是要把数字转成大写形式,没注意是要有数位,还对面试官说这第一题太简单,我可以把顺便第一道做了后再做一道题(本来是四选一的题)。
结果发现自己眼瞎,其实逻辑还是要想一想的,外加一个月没碰java(之前都在搞自己的服务器和 搞数据清洗)我差点连Scanner都忘记怎么写了,还好面试官当时有事离开了一会,我在这一行Scanner这就卡了几分钟。后来面试官到时间了过来看了看我,发现我还没写好,我当时真的尴尬到头晕,没开玩笑,是真的头晕了,看代码都在晃的那种。
总结了下,现在发现自己的基础真的差呀,这最基本的都能忘记。现在还是在把基础多练练,不然都生疏了。
java面试题,输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。相关推荐
- java取出字符串中的后四位_[原]Java面试题-将字符串中数字提取出来排序后输出...
[Title][原]Java面试题-将字符串中数字提取出来排序后输出 [Date]2013-09-15 [Abstract]很简单的面试题,要求现场在纸上写出来. [Keywords]面试.Java. ...
- 将数字字符串转换为人民币大写,壹、贰、叁、肆、伍、陆、柒、捌、玖、拾
将数字字符串转换为人民币大写,壹.贰.叁.肆.伍.陆.柒.捌.玖.拾 ''' 将数字字符串转成大写字符串 ''' a="零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾" b=" ...
- Java初学者作业——输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和(实践2)
返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个五位数字,计算各位数字之和并输出,运行结果为五个数字之和. 实现思路: (1)声明变量num,用于存储用户输入的数字. (2)通过Sca ...
- ACMNO.21 C语言-逆序输出 输入10个数字,然后逆序输出。 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0
题目描述 输入10个数字,然后逆序输出. 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 提示 数组?堆栈 ...
- [YTU]_1046 ( 输入10个数字,然后逆序输出)
Description 输入10个数字,然后逆序输出. Input 十个整数 Output 逆序输出,空格分开 Sample Input 1 2 3 4 5 6 7 8 9 0 Sample Outp ...
- Martix工作室考核题 —— 输入一串数字,按要求打印。
题目 输入一串数字,按要求打印,例: 输入 打印 1 ¥1.00 12 ¥12.00 123 ¥123.00 1234 ¥1,234.00 12345 ¥12,345.00 123456 ¥123,4 ...
- Execl中正确输入长串数字的方法
当我们在Excel中输入长串数字有时候会出现一些这样的问题,比如输入身份证号码或者序列号,只要序列号超过15位,输入的结果就以科学计数法表示. 下面介绍两种方法,可以在Excel中能够以普通方式正常显 ...
- 输入10个数字,然后逆序输出。
题目描述 输入10个数字,然后逆序输出. 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 #include ...
- shell 输入一串数字判断是否是手机号码
[root@localhost ~]# cat phone.sh #!/bin/bash echo "输入一串数字判断是否是手机号码" read -ep "" ...
最新文章
- 文明,在于传承,而不在于遗忘。
- Gnu/Linux 链接XServer方法
- HTML5 网站大观:12个优秀的 HTML5 黑色风格网站设计
- html ace编辑器,Tiny-editor
- java二分查找法视频_078-二分查找算法思路图解
- poj 2409 Let it Bead Polya计数
- Redis 3.2.x版本 redis.conf 的配置文件参数详解
- 计算机total函数,以一敌十的SUBTOTAL函数,你不会用就太可惜了!
- PCB Layout总结
- JAVA 中字符串的长度
- 读《乔布斯的魔力演讲》
- signature=3d7534face990de7e25e7438440abe49,Designing the User Interface 5e
- 360度全景图片怎么拍摄?
- 重庆计算机专业在职研究生,重庆师范大学在职研究生计算机专业教学方式
- 迪士尼照片_迪士尼经典游戏,《狂热》和更多Linux游戏新闻
- Windows 下设置自定义域名解析到指定 IP
- 如何做好项目管理任务分配
- 百度地图POI数据获取
- 日常学习——记使用POI多线程写Excel数据(续)
- 中华英才网或被全盘收购:三年对赌将近大限