如何在华为OD机试中获得满分?Java实现【人民币转换】一文详解!

news2024/12/22 14:18:02

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
  • 2. 输入描述
  • 3. 输出描述
  • 4. Java算法源码
  • 5. 测试
  • 6.解题思路

1. 题目描述

考试题目和要点:

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

2. 输入描述

输入一个double数。

3. 输出描述

输出人民币格式。

4. 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 处理多个 case
        String[] 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();
}

5. 测试

在这里插入图片描述

6.解题思路

  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. 根据题目要求,输出人民币格式的中文大写金额数字。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/580007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认识Servlet---1

hi ,大家好,今天为大家带来Servlet相关的知识,并且实现第一个程序 🎉1.什么是Servlet 🎉2.使用Servlet写一个hello程序 🌻🌻🌻1.创建项目 🌻🌻🌻2.引入依赖 🌻&…

GitHub基本概念

创建日期: 2018-09-22 09:50:06 Git & GitHub Git是一个版本控制软件: 读作[gɪt] ,拼音读作gē y te。 Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed an…

STM32之温湿度LCD显示并上传服务器

目录 项目需求 项目框图 硬件清单 LCD1602介绍及实战 硬件接线 引脚封装 代码实现 DHT11介绍及实战 硬件接线 引脚封装 代码实现 项目设计及实现 项目设计 项目实现 项目需求 使用温湿度传感器模块( DHT11 )获取温度及湿度&#xff0c…

推荐计算机领域的几本入门书籍

人工智能入门: 人工智能:现代方法(第4版)揭示AI与chatgpt的奥秘,详解人工智能的发展与未来! 推荐理由:系统性总结人工智能的方方面面,国际人工智能领域专家斯图尔特罗素撰写人工智能…

YOLO-NAS对象检测算法再一次颠覆YOLO系列算法——已超越YOLOv8

对象检测彻底改变了机器感知和解释人类世界的方式。这是计算机视觉中一项特别关键的任务,使机器能够识别和定位图像或视频中的物体。如自动驾驶汽车、面部识别系统等。推动对象检测进步的一个关键因素是发明了神经网络架构。强大的神经网络推动了对象检测的进步,增强了计算机…

Meta Learning

Meta Learning(元学习)是一种机器学习技术,它的核心思想是学习如何学习。 Meta Learning的目标是从以前的学习经验中学习到通用的学习策略和模式,以便在新的任务上快速适应和学习。 Meta Learning的核心思想是将学习任务视为元任…

Vivado下阻塞赋值和非阻塞赋值的对比

Verilog 基础知识 中已经介绍过了阻塞赋值和非阻塞赋值的区别,下面通过一个在Vivado中的简单例子来直观的反映两者的不同。 首先给出设计源代码如下。 module block(a,b,c,clk,x);input x;input clk;output reg a,b,c;always(posedge clk) begina x; //阻塞赋值…

零钱兑换,凑零钱问题,从暴力递归到动态规划(java)

凑零钱问题,从暴力递归到动态规划 leetcode 322 题 零钱兑换暴力递归(这个会超时,leetcode 跑不过去)递归缓存 leetcode 322 题 零钱兑换 322 零钱兑换 - 可以打开链接测试 给你一个整数数组 coins ,表示不同面额的硬…

[MAUI]模仿Chrome下拉标签页的交互实现

文章目录 创建粘滞效果的圆控件贝塞尔曲线绘制圆创建控件创建形变可控形变形变边界形变动画 创建手势控件创建页面布局更新拖拽物位置其它细节 项目地址 今天来说说怎样在 .NET MAUI 中制作一个灵动的类标签页控件,这类控件常用于页面中多个子页面的导航功能。 比如…

《数据库应用系统实践》------ 公园游客日流量管理系统

系列文章 《数据库应用系统实践》------ 公园游客日流量管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明…

【阅读笔记】概率预测之MQ-RNN(含Pytorch代码实现)

本文作为自己阅读论文后的总结和思考,不涉及论文翻译和模型解读,适合大家阅读完论文后交流想法,关于论文翻译可以查看参考文献。论文地址:https://arxiv.org/abs/1711.11053 MQ-RNN 一. 全文总结二. 研究方法三. 结论四. 创新点五…

谷歌推出免费AI编程神器Colab,欲将Copilot拉下神坛

在如今的AI编码工具领域,微软旗下的Github Copilot可以算得上是一家独大,而作为老对手的谷歌显然并不愿屈服于此。 近日,谷歌通过其官网高调发文宣布,将为研发工具Google Colaboratory(Colab)加入全新的AI…

DAY 68 redis高可用的主从复制、哨兵、cluster集群

Redis 高可用 什么是高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服…

RT-Thread memheap 开启多块 SRAM的方法

验证环境 NUCLEO-L476RG 开发板,板载 STM32L476RGT6(96K SARM1 32K SRAM2) Win10 64 位 Keil MDK 5.36 RT-Thread 5.0.1 版本(2023-05-28 master 主线) 功能描述 最近在研究 RT-Thread 内存的管理,熟…

Linux内核源码分析 2:Linux内核版本号和源码目录结构

一、Linux的版本 1. 稳定版和开发版 Linux内核主要分为两种版本: 稳定版(长期支持版):稳定版的内核具有工业级的强度,可以广泛地应用和部署。而每一代新推出的稳定版内核大部分都只是修正了一些Bug或是加入了一些新的…

【网络协议详解】——FTP系统协议(学习笔记)

目录 🕒 1. 概述🕒 2. 工作原理🕘 2.1 两个连接 🕒 3. 相关命令与处理🕘 3.1 接入命令🕘 3.2 文件管理命令🕘 3.3 数据格式化命令🕘 3.4 端口定义命令🕘 3.5 文件传输命令…

计算机组成原理 期末复习笔记

🌱博客主页:大寄一场. 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 第一章 计算机系统概论计算机软件的发展 计算机硬件的基本组成 计算机系统的层次结构 计算机的性能指标 第二章 数据表示 与 第三章 数据运算与运…

Go语言实现JDBC

Go语言操作数据库 Go语言提供了关于数据库的操作,包下有sql/driver 该包用来定义操作数据库的接口,这保证了无论使用哪种数据库,操作方式都是相同的; 准备工作: 下载驱动 需要在代码所在文件夹下执行相应的命令 go get github.com/go-sql-driver/mys…

DAY 69 rsync远程同步

rsync介绍 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前…

超超超级详细的画图以及代码分析各种排序的实现!

各种排序的实现 排序的概念直接插入排序基本思想实现直接插入排序的特性总结 希尔排序基本思想实现希尔排序的特性总结 简单选择排序基本思想实现直接选择排序的特性总结 堆排序实现堆排序的特性总结 冒泡排序基本思想实现冒泡排序的特性总结 快速排序基本思想hoare版本挖坑法前…