题解 | #链表排序#

人民币转换

http://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b


import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String numStr=in.nextLine();
            int splitResult[]=splitDoubleNum(numStr);
            int intValue=splitResult[0];
            int dotFenValue=splitResult[1];
            StringBuilder resultBuilder=new StringBuilder();
            resultBuilder.append("人民币");

            int wanValue=10000;
            int yiValue=wanValue*wanValue;
            int qianValue=1000;
            if(intValue>=yiValue){
                int curValue=intValue/yiValue;
                resultBuilder.append(getChineseWhenIsSmallTenThousand(curValue)+"亿");
                curValue=(intValue-curValue*yiValue)/wanValue;
                resultBuilder.append(getChineseWhenIsSmallTenThousand(curValue)+"万");
            }

            if(intValue>=wanValue){
                int curValue=intValue/yiValue;
                if(intValue>=yiValue&&curValue<qianValue){
                    resultBuilder.append(getChineseByBasicNum(0));
                }
                curValue=(intValue-curValue*yiValue)/wanValue;
                resultBuilder.append(getChineseWhenIsSmallTenThousand(curValue)+"万");
            }

            int curValue=intValue%wanValue;
            if(intValue>=wanValue&&curValue<qianValue){

                resultBuilder.append(getChineseByBasicNum(0));

            }

            resultBuilder.append(getChineseWhenIsSmallTenThousand(curValue));

            if(intValue>0){
                resultBuilder.append("元");
            }

            //如果有小数
            if(dotFenValue>0){
                resultBuilder.append(getLastDotToChinese(dotFenValue));
            }else{
                resultBuilder.append("整");
            }
            System.out.println(resultBuilder.toString());
        }
    }
    public static String getLastDotToChinese(int  dotFenValue){
        String result="";

        if(dotFenValue>=10){
            int curValue=dotFenValue/10;
            result=result+getChineseByBasicNum(curValue)+"角";
        }

        int curValue=dotFenValue%10;
        if(curValue>0){
            result=result+getChineseByBasicNum(curValue)+"分";
        }
        return result;
    }
    public static String getChineseWhenIsSmallTenThousand(int value){
        //将万以内的四位数,转化为中文
         String eachValue[]={"","拾","佰","仟"};

         StringBuilder stringBuilder=new StringBuilder();
         int numArr[]=splitTenThoundsNum(value);
         for(int i=0;i<numArr.length;i++){
             int eachIndex=numArr.length-i-1;

             if(eachIndex==1&&numArr[i]==1){
                 stringBuilder.append(eachValue[eachIndex]);
             }else{
                 if(numArr[i]!=0) {
                     stringBuilder.append(getChineseByBasicNum(numArr[i]) + eachValue[eachIndex]);
                 }else{
                     //遇到0的时候,判断是否读0 ,则判断后面的是否都是0,如果都是0,则读0
                     //如果包含非零的则不读0
                     boolean hasNotZeroNum=false;
                     for(int j=i+1;j<numArr.length;j++){
                         if(numArr[j]!=0){
                             hasNotZeroNum=true;
                             break;
                         }
                     }
                     //如果遇到了0,并且后面的数字包含非零的数字,并且之前没加零,则读0
                     //否则其他情况一概不读
                     if(hasNotZeroNum){
                         if(stringBuilder.indexOf("零")==-1){
                             stringBuilder.append("零");
                         }
                     }
                 }
             }
         }
         return stringBuilder.toString();
    }
    public static String getChineseByBasicNum(int num){
        String chineseBasicStrArr[]={"零","壹","贰","叁","肆",
                "伍","陆","柒","捌","玖"};
        return chineseBasicStrArr[num];
    }
    public static int[] splitDoubleNum(String numStr){
        int result[]={0,0};

        //说明有小数
        if(numStr.indexOf(".")>-1){
            String numSplitArr[]=numStr.split("[.]");
            result[0]=Integer.parseInt(numSplitArr[0]);
            result[1]=Integer.parseInt(numSplitArr[1]);
            if(numSplitArr[1].length()==1){
                result[1]=result[1]*10;
            }
        }else{
            result[0]=Integer.parseInt(numStr);
        }
        return result;
    }
    public static int[] splitTenThoundsNum(int num){
        String numStr=String.valueOf(num);
        int result[]=new int[numStr.length()];
        for(int i=0;i<result.length;i++){
            result[i]=numStr.charAt(i)-'0';
        }
        return result;
    }
}

全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务