zoukankan      html  css  js  c++  java
  • 阿拉伯数字转化大写中文汉字问题

    题目

    输入一串阿拉伯数字整数,输出对应的中文大写数字

    样例

    123456789
    壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖

    1000001234
    壹拾亿零壹仟贰佰叁拾肆

    10000
    壹万

    10010
    壹万零壹拾

    思路

    记得小学学读数的时候,从最小位从右到左,每4个数一组,如123456789,则分组为1|2345|6789,这实际上是以亿和万为分界线。
    有个比较棘手的问题是0的读法,因为如果有连续0,不能输出“零零零…”,要输出一个零或不输出,因为如1|0000|1234,不能输出“壹亿零万壹仟贰佰叁拾肆”。
    末尾有0,如1110,则最后一个零不能输出。
    末尾全是0,则一个零都不能输出。
    因此我的解法也从该分界方法处入手。

    代码

    Java:

    public class Test9 {
        public static void main(String[] args) {
            // 对应大写中文数字
            String[] arr1 = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
            // 逆序对应每一位的单位,如12345,2对应拾,3对应佰。
            String[] arr2 = {"", "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
            String num = null;
            int count = 0;
            Scanner sc = new Scanner(System.in);
            num = sc.nextLine();
            int k = num.length();
            for (int i = 0; i < num.length(); i++) {
                // index是当前位的实际数字
                int index = num.charAt(i) - 48;
                if (index == 0) {
                    // count作用是计算连续0的个数,以亿位和万位分界,每到一个分界点就清零
                    count++;
                } else {
                    count = 0;
                }
                // 如果没有连续的0,直接输出大写数字和单位
                // 如果有,则先判断:&&左边判断当前位是否为亿位或万位,
                // 右边判断该段是否全为0(如1|0000|1234,如果不加这个条件,会输出壹亿零万壹仟贰佰叁拾肆)
                // 符合条件则输出该位单位,且count置0
                // 每读一位k都要减一
                if (count == 0) {
                    System.out.print(arr1[index] + arr2[k--]);
                } else {
                    if ((arr2[k] == "亿" || arr2[k] == "万") && count != 4) {
                        System.out.print(arr2[k]);
                        count = 0;
                    }
                    // 如果当前只有一个连续0,那么需要判断后续是否全为0
                    // 如果不进行判断,则对于10100,如果读到第四位0,此时count为1,那么会输出壹万零壹佰零元
                    if (count == 1) {
                        boolean isSeqZero = true;
                        for (int j = i; j < num.length(); j++) {
                            if (num.charAt(j) - 48 != 0) {
                                isSeqZero = false;
                                break;
                            }
                        }
                        if (!isSeqZero) {
                            System.out.print("零");
                        }
                    }
                    k--;
                }
    
            }
        }
    }
    
  • 相关阅读:
    C# 创建winfrom项目(三层+postgresql)
    建站系列 安装GeoServer
    建站系列 离线环境安装tomcat
    建站系列 yum安装tomcat
    建站系列 yum安装java环境
    《计算机网络基础》笔记 2——MAC相关概念
    以太网帧长度为什么不能小于64字节?
    《计算机网络基础》笔记 1——体系结构介绍
    以太网MAC协议–CSMA/CD协议
    docker-compose固定IP和mac示例
  • 原文地址:https://www.cnblogs.com/zyoung/p/6678486.html
Copyright © 2011-2022 走看看