A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

         键盘录入一个大于-1小于1000的正整数,将该整数转换成中文在控制台输出
         除非输入数字不在规定的范围,否则可以一直进行输入转换
        小于10,数字后不需要带单位
                大于9小于100,数字后需要带单位”十”
                大于99小于1000,数字后需要带单位”百”
                数字转换成中文样式如下:
                5        五
                15       一十五
                115      一百一十五

2 个回复

正序浏览
/*
* 利用 %和 / 运算符求得每一位数字并保存到数组,然后通过该数组输出结果
*/

import java.util.Scanner;

public class ToChinese {

        private static final char[] CHINESE = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千' };
        private static int num = 0, arrayRealLength = 0;
        private static int[] array = new int[3];

        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
               
                while ((num = getNum(scanner)) != -1) {
                        arrayRealLength = 0;
                        getArray(num, array);
                        getChinese(array);
                }
        }

        private static void getArray(int num, int[] array) {
                for (int i = 0; i < array.length; i++) {
                        if (num == 0)
                                break;
                        array[i] = num % 10;
                        num /= 10;
                        arrayRealLength++;
                }

        }

        private static int getNum(Scanner sc) {
                int num = sc.nextInt();
               
                if (num < -1 || num > 1000)
                        return -1;
               
                return num;
        }

        private static void getChinese(int[] array) {
                if (num == 0) {
                        System.out.print("" + CHINESE[0]);
                        return;
                }

                int lowOrderBit = -1;
                if (num % 10 == 0) {
                        if (num % 100 == 0)
                                lowOrderBit = 1;
                        else
                                lowOrderBit = 0;
                }

                for (int i = arrayRealLength - 1; i > lowOrderBit; i--) {
                        System.out.print("" + CHINESE[array[i]]);
                        if (array[i] != 0 && i > (lowOrderBit + 1)) // 排除10或100的倍数
                                System.out.print(CHINESE[i + 9]);
                        else if (num % 100 == 0)
                                System.out.print(CHINESE[11]);
                        else if (num % 10 == 0)
                                System.out.print(CHINESE[10]);

                }
                System.out.println();
        }
}
回复 使用道具 举报
第一步:转换为字符串
第二步:判定字符串长度
                        长度为1: 替换0-9为大写汉字
                        长度为2: 替换0-9为大写汉字,在中间位置添加“十
                                                末尾为零时,去掉零(读法问题)
                                                “一十”改为“十”(读法问题)
                        长度为3: 替换0-9为大写汉字,在指定位置添加“百”“十”
                                                 末尾为零时,去掉零(读法问题)
  大家再改进改进
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马