当前位置: 代码迷 >> Java相关 >> 中文数字转换笔试题
  详细解决方案

中文数字转换笔试题

热度:125   发布时间:2010-11-22 22:48:23.0
中文数字转换笔试题
原题:把一个六位一下的阿拉伯数字转换成中文数字,阿拉伯数字不包含小数

这个题以前自己也做过,费了九牛二虎的力气才做出来。这次打算凭记忆再写一遍,后来发现可能有更好的方法。作出题后,自己内心中一点点丑陋的小得意又冒出头来,为此自己还检讨了一下,就打算作罢了。
    这样就能约束自己吗,很显然是不能,要突破。所以写出来,作为自己学习java编程的小小花絮的记忆。
    (上面几句纯属自嘲,请勿拍砖)
import java.util.Scanner;

public class NumberConvert {
    private static String[] zh = new String[] { "零", "壹", "贰", "叁", "肆", "伍",
            "陆", "柒", "捌", "玖" };
    private static String[] loc = new String[] { "", "十", "百", "仟", "万", "十",
            "百", "仟" };

    public static void main(String[] args) {
        int num = getNumber();
        if(num==-1){
            
            return ;
        }
        String result = convert(num);
        System.out.println(result);
    }

    private static String convert(int num) {
        if (num == 0) {
            return "零";
        }
        String result = new String();
        boolean flag = false;
        for (int i = String.valueOf(num).length(); i > 0; i--) {
            int temp = (int) (num / (Math.pow(10, i - 1)) % 10);
            if (temp == 0) {
                flag = true;
                continue;
            } else {
                if (flag) {
                    result += "零";
                    flag = false;
                }
                result += zh[temp];
                result += loc[i - 1];
            }
        }
        return result;
    }

    private static int getNumber() {
        Scanner sc = new Scanner(System.in);
        for (;;) {
            String str = sc.next();
            if (str.matches("^\\d+$")) {
                return Integer.parseInt(str);
            } else {
                if ("exit".equals(str)) {
                    return -1;
                }
                System.out.println("用户输入不合规则,请重新输入:");
                continue;
            }
        }
    }

}
搜索更多相关的解决方案: 笔试  数字  中文  

----------------解决方案--------------------------------------------------------
这么好的帖,为什么没有人顶?
顶上去
----------------解决方案--------------------------------------------------------
不过,继续努力!
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.regex.*;

public class StringRegex{
  
//这个方法是把数字转换成人民币大写。可带小数
    public String getr(double n){
        String s=String.valueOf((int)n); //提取整数

        int m1=(int)((n-(int) n)*1000);
        int m2=((int)((n-(int) n)*100)) * 10;
        if(m1>m2){m1+=1;}   //如果小数有误差,改正(如。1.3是1.299999998)
        String m=String.valueOf(m1/10); //提取小数。

        String q[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        String w[]={"","拾","佰","仟"};
        String d[]={"分","角"};

        String s1="";
        for(int i=0,ii=s.length()-1;i<s.length();i++,ii--){
            s1+=q[Integer.parseInt(s.substring(i,i+1))];
            if(Integer.parseInt(s.substring(i,i+1))!=0){s1+=w[ii%4];}
            if(ii==8){s1+="亿";}
            if(ii==4){s1+="万";}

        }
        s1+="元";
        s1=Pattern.compile("[零]{2,}").matcher(s1).replaceAll("零");
        s1=Pattern.compile("[零]{1}([亿万元]{1})").matcher(s1).replaceAll("$1");

        String s0="";
        if(m1>0){

            for(int i=m.length()-1,o=0;i>=0;i--,o++){
                s0=q[Integer.parseInt(m.substring(i,i+1))]+d[o]+s0;
            }
            s0=Pattern.compile("零分").matcher(s0).replaceAll("");
            if(m1<100){s0="零"+s0;}
        }
        return s1+s0;

    }


}



楼主的语文比我还差,十?拾

[ 本帖最后由 虾B写 于 2010-11-24 19:55 编辑 ]
----------------解决方案--------------------------------------------------------
getr是StringRegex类的一个方法,还有判断是否是数字,是否是日期,加密之类的。功能分开能反复调用。
----------------解决方案--------------------------------------------------------
看了受益啊,顶上去
----------------解决方案--------------------------------------------------------
我是来观望的,现在还不晓得主攻哪方面嘞。
----------------解决方案--------------------------------------------------------