黑马程序员技术交流社区

标题: javaSE考试试题 [打印本页]

作者: 袁志娜    时间: 2016-8-26 21:49
标题: javaSE考试试题
问题:金额转换,阿拉伯数字转换成中国传统形式。
101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整    ,求解


作者: 水月灬清影    时间: 2016-8-27 11:25
先不说程序怎么写,为什么我觉得亿和千之间加零很别扭?
作者: 袁志娜    时间: 2016-8-27 22:49
这是遇到题,只有解决的办法,谢谢,我查了一下资料做出来了
作者: wx_W1hr77lR    时间: 2016-8-27 23:36
百度一下...
作者: sandkay    时间: 2016-8-28 00:05
谢谢噢噢噢噢哦哦哦
作者: L10052108    时间: 2016-11-8 21:38
[AppleScript] 纯文本查看 复制代码
package com.itheima;

import java.util.Scanner;

/**
* 目的:金额转换,阿拉伯数字转换成中国传统形式。
*
* @author liuwei
* @version V1.0
*
*/
/*
* 分析:把数字转换成金额,首先应该考虑这个数字的大小(进行分段判断), 1,首先判断数字的范围 2,每一个数字进行转换 3,字符串进行拼接
* 壹贰叁肆伍陆柒捌玖拾
*/
public class Test9 {
        public static void main(String[] args) {
                // 键盘录入一个数字
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个数字:");
                long num = sc.nextLong();

                // 创建一个StringBuilder 用于接收对象
                StringBuilder sb = new StringBuilder();

                // 分段进行判断 小于1万
                if (num < 10000) {
                        sb = convert1(num);
                        sb.append("整");
                        System.out.println(sb);
                } else if (num < 100000000) {
                        sb = convert2(num);
                        sb.append("整");
                        System.out.println(sb);
                } else if (num < Long.MAX_VALUE) {
                        sb = convert3(num);
                        sb.append("整");
                        System.out.println(sb);
                } else {
                        System.out.println("您输入的数字超出了范围");
                }

        }

        /**
         * 把小于1万以下的数字转换成字符串
         *
         * @param num
         */
        private static StringBuilder convert1(long num) {
                StringBuilder sb = new StringBuilder();
                String str = new String();

                // 定义成字符数组,是因为可以直接通过索引值,获取指定字符串,比switch语句更好
                String[] weiStr = { "", "拾", "佰", "仟", "万", "亿" };
                String[] numStr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

               
                // count 用于记录索引位置,方便查找对应的 数字 转化成汉字
                int count = 0;
                char[] chs = String.valueOf(num).toCharArray();
                for (int x = 0; x < (chs.length); x++) {
                       
                        // 由于 0 的读法不同需要特别对待,读0 时候不需要加千 百等字样。
                        if (num % 10 == 0) {
                                // String s1 = weiStr[count++];
                                count++;
                                String s2 = numStr[(int) (num % 10)];
                                num = num / 10;
                                str.contains(s2);

                                sb.append(s2);
                        } else {
                                String s1 = weiStr[count++];
                                String s2 = numStr[(int) (num % 10)];
                                num = num / 10;

                                str.concat(s1).concat(s2);
                                sb.append(s1).append(s2);
                        }

                }

                // 为了使用 sb 不具备的替换方法,进行转化成 字符串,替换完成,在转化成 sb
                str = sb.toString();

                // 如果有多个零,只读一个零
                while (str.contains("零零")) {
                        str = str.replace("零零", "零");
                }

                // 不能以零结尾,使用startsWith,是因为,读取的时候是倒着添加到字符串的。
                if (str.startsWith("零")) {
                        str = str.substring(1, str.length()).trim();
                }

                sb = new StringBuilder(str);

                // 把字符串的顺序改过来。
                return sb.reverse();

        }

        /**
         * 把1万以上1亿以下的数字转换成字符串
         *
         * 分成两个部分,一万以下,使用上一个方法读,加一个万字
         *
         * @param num
         * @return
         */
        private static StringBuilder convert2(long num) {
                StringBuilder sb = new StringBuilder();

                sb.append(convert1(num / 10000)).append("万")
                                .append(convert1(num % 10000));

                return sb;

        }

        /**
         * 把1亿以上的数字转换成字符串
         *
         * 分成两个部分,一亿以下,使用上一个方法读,加一个亿字
         *
         * @param num
         * @return
         */
        private static StringBuilder convert3(long num) {
                StringBuilder sb = new StringBuilder();

                sb.append(convert2(num / 100000000)).append("亿")
                                .append(convert2(num % 100000000));

                // 如果万位置上 没有数值,就把 万位去掉
                String str = sb.toString();

                while (str.contains("零万")) {
                        str = str.replace("零万", "");
                }

                sb = new StringBuilder(str);

                return sb;

        }
}

这是我自己做的,我自己也知道有些地方有问题,仅供参考
作者: L10052108    时间: 2016-11-8 21:45
说说我的思路吧,首先了解规则
一、读多位数的方法是先把这个多位数分级。从高位到低位一级一级地往下读。读亿级、万级时,按个级的读法去读,只要在后面再加上级的单位“亿”或“万”。每级开头或中间有一个0,或者连续有几个0的,都只读一个零。
二。先分级,可分成三级:亿级       万级        个级
三。从高位到低位一级一级地往下读,后面加上级的单位
四。合起来
作者: 黑马初学者    时间: 2016-11-8 23:03
学安卓的路过。。
作者: 小牛想成为大牛    时间: 2016-11-8 23:28
可以~~~~
作者: 袁志娜    时间: 2016-11-8 23:56





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2