华为OD机试真题B卷 Java 实现【人民币转换】,附详细解题思路

news/2024/11/23 5:37:42/

一、题目描述

考试题目和要点:

  1. 中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
  2. 中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
  3. 阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
  4. 10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
  5. 十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”

二、输入描述

输入一个double数。

三、输出描述

输出人民币格式。

四、解题思路

  1. 输入一个double数;
  2. 使用split(“\.”)将输入的数分割为整数部分和小数部分,并存储在字符串数组s中;
  3. 判断小数部分是否为"00",如果是,则输出整数部分的中文大写金额数字后跟"元整";
  4. 判断整数部分是否为"0",如果是,则输出小数部分的中文大写金额数字;
  5. 如果不满足以上两种情况,输出整数部分的中文大写金额数字后跟"元",再输出小数部分的中文大写金额数字;
  6. 实现solveXiao函数,接收小数部分的字符串作为参数,返回小数部分的中文大写金额数字;
    • 将小数部分的第一个字符转换为整数,表示角;
    • 将小数部分的第二个字符转换为整数,表示分;
    • 如果角不为0,则添加角的中文大写金额数字和"角";
    • 如果分不为0,则添加分的中文大写金额数字和"分";
    • 返回拼接后的字符串;
  7. 实现solveZheng函数,接收整数部分的double数作为参数,返回整数部分的中文大写金额数字;
    • 使用StringBuilder来拼接中文大写金额数字;
    • 使用pow变量来表示权值的索引,初始值为0;
    • 使用循环,当整数部分不为0时进行迭代;
    • 在每次迭代中,根据权值索引添加"万"或"亿"到拼接的字符串中;
    • 将整数部分模10000得到四位数的临时值temp;
    • 提取临时值的个位、十位、百位和千位的数字;
    • 判断个位是否为0,如果不为0,则添加个位的中文大写金额数字;
    • 判断十位是否为0,如果不为0,则添加"拾"和十位的中文大写金额数字(如果十位为1,则不添加十位的中文大写金额数字);
    • 判断百位是否为0,如果不为0,则添加"佰"和百位的中文大写金额数字;
    • 判断千位是否为0,如果不为0,则添加"仟"和千位的中文大写金额数字;
    • 更新整数部分为整数部分除以10000的结果,用于下一次迭代;
    • 更新权值索引,当索引超过2时,重置为1;
    • 循环结束后,将拼接的字符串反转,并返回作为结果;
  8. 在主函数中,使用while循环读取输入的每个测试用例;
  9. 根据题目要求,输出人民币格式的中文大写金额数字

五、Java算法源码

public static String[] ten = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
public static String[] power = {"万", "亿"};
public static String[] daiwei = {"元", "角", "分", "整"};public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString[] s = in.nextLine().split("\\.");//分割为整数部分和小数部分if (s[1].equals("00")) {System.out.println("人民币" + solveZheng(Double.parseDouble(s[0])) + "元整");} else if (s[0].equals("0")) {System.out.println("人民币" + solveXiao(s[1]));} else {System.out.println("人民币" + solveZheng(Double.parseDouble(s[0])) + "元" + solveXiao(s[1]));}}
}public static String solveXiao(String s2) {StringBuilder sb = new StringBuilder();int jiao = Integer.parseInt(s2.substring(0, 1));int fen = Integer.parseInt(s2.substring(1, 2));if (jiao != 0) {sb.append(ten[jiao]);sb.append("角");}if (fen != 0) {sb.append(ten[fen]);sb.append("分");}return sb.toString();
}public static String solveZheng(double zheng) {StringBuilder sb = new StringBuilder();int pow = 0;while ((int) zheng != 0) {if (pow != 0) {sb.append(power[pow - 1]);}int temp = (int) (zheng % 10000);//个位int gewei = temp % 10;int shiwei = (temp / 10) % 10;int baiwei = (temp / 100) % 10;int qianwei = (temp / 1000) % 10;if (gewei != 0) {sb.append(ten[gewei]);}//十位if (shiwei != 0) {sb.append("拾");if (shiwei != 1) {sb.append(ten[shiwei]);}} else {if (gewei != 0 && (temp > 99 || (int) zheng > 10000)) {sb.append(ten[0]);}}//百位if (baiwei != 0) {sb.append("佰");sb.append(ten[baiwei]);} else {if (shiwei != 0 && (temp > 999 || (int) zheng > 10000)) {sb.append(ten[0]);}}if (qianwei != 0) {sb.append("仟");sb.append(ten[qianwei]);} else {if (baiwei != 0 && (int) zheng > 10000) {sb.append(ten[0]);//}}zheng /= 10000;pow++;if (pow > 2) {pow = 1;}}return sb.reverse().toString();
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/137498.html

相关文章

依赖倒置原则:高层代码和底层代码,到底谁该依赖谁?

前言 上一篇,我们讲了 ISP 原则,知道了在设计接口的时候,我们应该设计小接口,不应该让使用者依赖于用不到的方法。 依赖这个词,程序员们都好理解,意思就是,我这段代码用到了谁,我就…

壁纸 - 热门高清图片和背景主题

特色功能介绍: 1、海量的高清精美壁纸 2、每日更新,让您紧跟潮流壁纸的步伐 3、提供数十个类别和数百个主题专辑以供筛选 4、左右划屏快速切换预览,享受全屏无死角视觉盛宴 5、独家提供壁纸缩放功能,让您全面掌控壁纸的每一处细节…

壁纸 - 4K高清壁纸大全

壁纸 - 4K高清壁纸大全 用独特的主题和壁纸来装点您的电脑屏幕!利用您的设备展现自我,获得乐趣和灵感! 大量内容供您欣赏: 4K高清壁纸,完美适配电脑屏幕 9大分类精彩的壁纸:抽象、风景、花、动物、食物…

超清无水印高清壁纸

高图壁纸网站拥有着极具现代化的操作风格,如果你是壁纸控需要精美简约的高清壁纸,你将 更加喜欢上高图网。 在这里壁纸控可以探索更多精美的壁纸。 www.gaopic.com 这些图片除了可以作为桌面壁纸外,还可以用于设计素材,制作PPT…

小米note android原生壁纸,安卓福利分享:全新三星Note8原生壁纸 每一张都是三星扛鼎之作!...

原标题:安卓福利分享:全新三星Note8原生壁纸 每一张都是三星扛鼎之作! 三星Note 8作为三星17年下半年的旗舰,在经历了Note7事件之后,三星Note 8也是被三星赋予了更多的希望,各方面也都是精心打造&#xff0…

三星Galaxy M02S内置壁纸,共十张

今日分享一点三星壁纸 这套壁纸是三星Galaxy M02S内置的壁纸,先看效果 喜欢就去下原图,原图在最底下获取! 壁纸来源网络由宅哥收集而来,如侵联删 今日壁纸原图都在这里 识别下方小程序码即可下载原图哦! 白嫖外卖福利已…

三星tab4如何升级android,三星Galaxy Tab S4能更新安卓10吗 三星GalaxyTabS4怎么升级

今年 6 月份,三星 Galaxy Tab S4 收到了 Android 10 与 One UI 2.1 更新,现在,AT&T 版本 Galaxy Tab S4 也正式迎来了 Android 10 更新,版本号 QP1A.190711.020.T837AUCU4CTH5,Android 安全修补程序级别提高至 202…

让android手机崩溃的壁纸,一张壁纸让无数三星手机崩溃,原因找到了!

最近三星手机的BUG可以说是层出不穷,让人对这个老品牌的手机质量都产生了不少的怀疑,在前段时间因为更新导致大量手机变“砖”资料丢失后,又遇到了日历BUG。这个BUG会导致三星手机机体崩溃、重启、黑盘、乱码甚至清空用户的手机数据&#xff…