华为的一道笔试题目

/**
 * 解这个题目的思路主要是:从后往前读入数据,依次替换即可
 * 关键是处理很多0的情况
 * 这里用到的是先替换在处理0的情况,如:壹仟零百零拾壹圆
 * 先把零百,零拾等处理成零结果为:壹仟零零壹圆
 * 在把多个零替换成一个零就可以了
 *
 * 具体程序如下
 
*/


import  java.util. * ;

public   class  MoneyTest  {
    
    
/**
     * 数字替换成字符汉字
     
*/

    
public static String getCh(Integer en){
        HashMap map 
= new HashMap();
        map.put(
new Integer(1),"");
        map.put(
new Integer(2),"");
        map.put(
new Integer(3),"");        
        map.put(
new Integer(4),"");
        map.put(
new Integer(5),"");
        map.put(
new Integer(6),"");
        map.put(
new Integer(7),"");
        map.put(
new Integer(8),"");
        map.put(
new Integer(9),"");
        map.put(
new Integer(0),"");
        
return (String)map.get(en);
    }

    
    
/**
     * 按照位数来生成字符串(不考虑零的情况)
     * 如壹仟零零壹圆
     
*/

    
public static String getNumMon(int mark,Integer en){
        
if(mark == 1){
            
if(en.intValue() == 0)
                
return "";
            
else
                
return getCh(en);    
        }
    
        
if(mark == 2){
            
return getCh(en) + "";    
        }

        
if(mark == 3){
            
return getCh(en) + "";    
        }

        
if(mark == 4){
            
return getCh(en) + "";    
        }

        
if(mark == 5){
            
return getCh(en) + "";    
        }

        
if(mark == 6){
            
return getCh(en) + "";    
        }

        
if(mark == 7){
            
return getCh(en) + "";    
        }

        
if(mark == 8){
            
return getCh(en) + "";    
        }

        
if(mark == 9){
            
return getCh(en) + "亿";    
        }

        
if(mark == 10){
            
return getCh(en) + "";    
        }

        
if(mark == 11){
            
return getCh(en) + "";    
        }

        
if(mark == 12){
            
return getCh(en) + "";    
        }

        
return "";
    }

    
/**
     * 处理为零的情况
     
*/

    
public static String nonRep(String out){
        
int mark = -1;
        
//System.out.println("零仟".replaceAll("零","仟"));
        out = out.replaceAll("零仟","");
        out 
= out.replaceAll("零百","");
        out 
= out.replaceAll("零拾","");
        
        
//System.out.println(out);
        for(int i=0;i<out.length();i++){
            String sub 
= out.substring(i,i+1);
            
if(sub.equals("")){
                
if(i - mark == 1){
                    out 
= out.substring(0,mark+1+ out.substring(i+1,out.length());
                    i 
= mark;
                }
else{
                    mark 
= i;    
                }
    
            }
    
        }

        out 
= out.replaceAll("零万","");
        out 
= out.replaceAll("零亿","亿");
        
/*String output = "";
        for(int i=0;i<out.length();i++){
            String sub = out.substring(i,i+1);
            String sub3 ="";
            if(i + 2 < out.length())
                sub3 = out.substring(i+1,i+2);
            if(sub.equals("零") && (!sub3.equals("万") || !sub3.equals("亿"))){
                if(i - mark == 2 || i - mark == 1){
                    out = out.substring(0,mark+1) + out.substring(i+2,out.length());
                    i = mark;
                }else{
                    mark = i;    
                }    
            }    
        }
        for(int i=0;i<out.length();i++){
            String sub1 = out.substring(i,i+1);
            String sub2 = "";
            if(i + 2 < out.length()){
                 sub2 = out.substring(i+1,i+2);
            }
            if(sub1.equals("零")&&(sub2.equals("仟") || sub2.equals("百") || sub2.equals("拾"))){
                out = out.substring(0,i+1)+out.substring(i+2,out.length());
                //System.out.println(out);
                i = i - 1;    
            }
        }
        
*/

        
return out;    
    }

    
/**
     * 测试函数
     
*/

    
public static void main(String[] args){
        
        
if(args.length < 1){
            System.out.println(
"please input the money");
            
return;    
        }

        
        
if(args[0].length() > 12){
            System.out.println(
"输入数字字符串的个数不能大于12位");
            
return;                    
        }

        
try{
            Float.parseFloat(args[
0]);    
        }
catch(Exception e){
            System.out.println(
"输入字符串的格式不对");
            
return;                
        }

        
        String mon 
= args[0];
        
int mark = 0;
        String out 
= "";
        
        
for(int i= mon.length() -1 ;i >=0;i--){
            Integer en 
= new Integer(Integer.parseInt(mon.substring(i,i+1)));    
            mark 
= mark + 1;
            out 
= getNumMon(mark,en)+out;
        }

        
//System.out.println(out);
        out = nonRep(out);
        
if((out.substring(out.length()-2,out.length()-1)).equals("")){
            out 
= out.substring(0,out.length()-2+ out.substring(out.length()-1,out.length());
        }

        System.out.println(out);
        
//System.out.println(nonRep(out));
        
        
/*System.out.println(nonRep("壹仟零零贰"));
        System.out.println(numtochinese(mon));
*/

    }

    
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值