記錄去大搜車的一道筆試題

     java編程題java

  實現一個字符串數字轉人民幣的小功能c++

  入參:一個字符串,範圍是0.00~999999.99,最多兩位小數面試

  出參:對應的人民幣大寫或者驗證不合法編程

  例子1:數組

  input:12345.67app

  output:壹萬貳仟叄佰肆拾伍元陸角柒分jvm

  例子2:學習

  input:1000000spa

  output:輸入值超出範圍code

  例子3

  input:133a055

  output:輸入的值不是數字

 

說明一下:當時個人思路是:

    (1)根據小數點分割,而後獲取到小數點左邊的整數位,和右邊的小數位。

    (2)而後各自根據空格分割,獲取到整數位數組和小數位數組。

    (3)整數位數組進行從右到左的遍歷,這樣能夠拼接單位(如:元、拾、佰..)

    (4)小數位從左到右遍歷,好處如(3)

    (5)在三、4遍歷過程當中須要把對應的數字轉換成大寫中文

遺憾:當時整個思路是這樣的,可是手寫代碼仍是不如本身用電腦方便,易改。筆試過程當中由於本身寫的  例子二、例子3 不符規則的代碼 寫多了,把位置都佔了,不得已說了一下個人思路。不過當時在第三步寫的有一點問題。下面有我錯誤想法的代碼。不過我認爲整個的思路是沒問題的。後來回家後本身電腦敲了一波(下面不符規則的代碼就不寫了)。

 1   public static String transfer(String num){
 2          num="12345.67";
 3 
 4         String[] chinese={"0,零","1,壹","2,貳","3,叄","4,肆","5,伍","6,陸","7,柒","8,捌","9,玖"};
 5         //此處根據小數點分割
 6         String[] str1= num.split("\\.");
 7         //這裏是根據空格拆分的整數數組
 8         String[] str2= str1[0].split("");
 9         //這裏是根據空格拆分的小數數組
10         String[] str3= str1[1].split("");
11         //這裏的c 是整數位用來累加遍歷次數 以獲取到 單位的(元,拾...)
12         //
13         int c=0;
14         StringBuffer sb;
15         StringBuffer newsb=new StringBuffer();
16         for (int i = str2.length-1; i >=0 ; i--) {
17             sb=new StringBuffer();
18             //這裏是獲取int數字轉換成中文數字
19             for (int y=0;y<chinese.length;y++){
20                 System.out.println(str2[i]);
21                 if(chinese[y].startsWith(str2[i])){
22                     System.out.println(chinese[y]);
23                     sb.append(chinese[y].split(",")[1]);
24                     break;
25                 }
26             }
27 
28             //這裏當時的錯誤想法是這裏,switch裏面的是(str2[i]).
29             // 筆試後面試官說這裏有問題,可是後來已經面試完了,我纔想起怎麼去解決這個問題。大寫的尷尬。。。
30             switch (c){
31                 case 0: sb.append("元");break;
32                 case 1: sb.append("拾");break;
33                 case 2: sb.append("佰");break;
34                 case 3: sb.append("仟");break;
35                 case 4: sb.append("萬");break;
36 //                case 5: sb.append("拾萬");break;
37 //                case 6: sb.append("百萬");break;
38             }
39             //整數數組位 替換成數字+單位
40             str2[i]=sb.toString();
41             c++;
42         }
43         //這裏須要把整數數組從左到右 進行拼接顯示
44         for (int i = 0; i < str2.length; i++) {
45             newsb.append(str2[i]);
46         }
47 
48         //小數位從左到右拼接
49         for (int i =0; i < str3.length ; i++) {
50             sb=new StringBuffer();
51             for (int y=0;y<chinese.length;y++){
52                 if(chinese[y].startsWith(str3[i])){
53                     System.out.println(chinese[y]);
54                     sb.append(chinese[y].split(",")[1]);
55                     break;
56                 }
57             }
58             switch (i){
59                 case 0: sb.append("角") ;break;
60                 case 1: sb.append("分");break;
61             }
62             //這裏單純是爲了查看 其實能夠省略此步驟
63             str3[i]=sb.toString();
64             newsb.append(str3[i]);
65         }
66 
67         System.out.println(newsb.toString());
68         return newsb.toString();
69     }

最後說一下整個面試:

  整個面試感受說了不少,可是也有一部分沒回答上來。問的東西很簡單。以前看了不少jvm底層的東西,垃圾回收和垃圾收集器等,集合的底層和擴容等。

  感受和第一個面試官嘮了四五十分鐘把。可是到了第二個面試官,上了就問我不是計算機專業的?我自己是土木工程的(本科),我實話實說。後來的嘮嗑感受面試官都快睡着了,感受我說的東西他也沒聽多少。次日 大搜車發來了郵件給我婉拒了。

  整個面試分析下來,兩點:

  一、本身的有點知識掌握不牢靠、不全面、不深刻。可是認爲我跟計算機專業的畢業相同時間的人比 ,我不輸不少。

  二、感受本身輸在了專業上,假如計算機專業畢業是加分項,我這不是的 不是零分而是負數。可是不能一直失落,要越挫越勇,再沉澱下,以後本身要用更多時間學習,來彌補專業問題。

相關文章
相關標籤/搜索