CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

          好久不寫技術貼了,決定換一下思維,寫個算法相關的。

          最近面試的時候,很喜歡問兩個算法問題。
          問題1:阿拉伯數字的金額轉換為中國傳統的漢字形式。
          問題2:不增加變量,交換兩個數值變量的值。

          先說問題2,因為問題2最簡單。
                  很顯然,要想不增加變量,交換兩個變量的值,只可能做加減乘除運算。用對應的加減法或者乘除法都可以做到。舉例:a=5;b=8。
                加減: a=a+b=5+8=13;b=a-b=13-8=5;a=a-b=13-5=8;
                            a=a-b=5-8=-3;b=a+b=-3+8=5;a=b-a=5-(-3)=8;
             同理,乘除。
          我覺得此題主要是考一個人的思維。但是面試的人,大部分都不會做。

          再說問題1:還是大部分人不會做。現提供本人思路如下:
                 分析問題:a、小數點之前為整數,小數點后只有兩位,為角分。
                                     b、小數點之前個位單位為元,依次為元,十,百,千,萬,十萬,百萬,千萬,億……
                                     c、每位的數字對應為:零、壹、貳、叁、肂、伍、陸、柒、捌、镹。
                                    d、在操作中,數值運算和數組操作性能最快。
                 思路:a、用兩個數組,array1[10]、array2[]按下標為0、1、……的順序分別存儲零、壹、貳、叁、肂、伍、陸、柒、捌、镹。和元,十,百,千,萬,十萬,百萬,千萬,億……
                            b、針對整數部分,從十開始除,余數轉換為漢字,取對應余數值得數組array1[余數]所對應的值。取得到的商,并記錄除的次數。次數對應為array[次數]的漢字。拼接。
                            c、反復第二步,直道商為0。
                            d、其中余位為0時特殊處理。
                            e、小數點后統一處理兩次。不做講述。
                舉例:234.12。整數為234。
                           234/10  商23 余4  除次數為0  array1[4]+array2[0]=肆元
                           23/10    商2   余3  除次數為1  array1[3]+array2[1]=叁拾
                           2/10      商0   余2  除次數為2  array1[2]+array2[2]=貳佰
                合起來就是貳佰叁拾肆元。
                  此題考的是拿到問題后的分析思路和基本功。可能每個人的實現方法不一樣。可能是緊張吧,面試的時候,大部分人都答不出來。

          posted on 2008-07-12 19:21 CONAN 閱讀(283) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 兴和县| 马边| 新宾| 太原市| 龙口市| 大丰市| 环江| 临安市| 林芝县| 乌拉特后旗| 石阡县| 弥渡县| 石家庄市| 新绛县| 岳普湖县| 武定县| 石阡县| 东兴市| 开封县| 桦甸市| 任丘市| 蒲江县| 绥中县| 类乌齐县| 宁阳县| 体育| 莱芜市| 铜川市| 忻州市| 西平县| 日喀则市| 大城县| 金湖县| 延津县| 开江县| 灵武市| 星座| 平乡县| 阿荣旗| 方正县| 临汾市|