好久不寫技術(shù)貼了,決定換一下思維,寫個算法相關(guān)的。
最近面試的時候,很喜歡問兩個算法問題。
問題1:阿拉伯?dāng)?shù)字的金額轉(zhuǎn)換為中國傳統(tǒng)的漢字形式。
問題2:不增加變量,交換兩個數(shù)值變量的值。
先說問題2,因為問題2最簡單。
很顯然,要想不增加變量,交換兩個變量的值,只可能做加減乘除運(yùn)算。用對應(yīng)的加減法或者乘除法都可以做到。舉例: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:還是大部分人不會做。現(xiàn)提供本人思路如下:
分析問題:a、小數(shù)點(diǎn)之前為整數(shù),小數(shù)點(diǎn)后只有兩位,為角分。
b、小數(shù)點(diǎn)之前個位單位為元,依次為元,十,百,千,萬,十萬,百萬,千萬,億……
c、每位的數(shù)字對應(yīng)為:零、壹、貳、叁、肂、伍、陸、柒、捌、镹。
d、在操作中,數(shù)值運(yùn)算和數(shù)組操作性能最快。
思路:a、用兩個數(shù)組,array1[10]、array2[]按下標(biāo)為0、1、……的順序分別存儲零、壹、貳、叁、肂、伍、陸、柒、捌、镹。和元,十,百,千,萬,十萬,百萬,千萬,億……
b、針對整數(shù)部分,從十開始除,余數(shù)轉(zhuǎn)換為漢字,取對應(yīng)余數(shù)值得數(shù)組array1[余數(shù)]所對應(yīng)的值。取得到的商,并記錄除的次數(shù)。次數(shù)對應(yīng)為array[次數(shù)]的漢字。拼接。
c、反復(fù)第二步,直道商為0。
d、其中余位為0時特殊處理。
e、小數(shù)點(diǎn)后統(tǒng)一處理兩次。不做講述。
舉例:234.12。整數(shù)為234。
234/10 商23 余4 除次數(shù)為0 array1[4]+array2[0]=肆元
23/10 商2 余3 除次數(shù)為1 array1[3]+array2[1]=叁拾
2/10 商0 余2 除次數(shù)為2 array1[2]+array2[2]=貳佰
合起來就是貳佰叁拾肆元。
此題考的是拿到問題后的分析思路和基本功。可能每個人的實現(xiàn)方法不一樣。可能是緊張吧,面試的時候,大部分人都答不出來。
posted on 2008-07-11 16:18
henry1451 閱讀(127)
評論(0) 編輯 收藏