精華區beta Marginalman 關於我們 聯絡資訊
273. Integer to English Words 題目: 給你一個2^32-1到0之間的一個整數,把他轉換成英文描述法,例如123->One Hundred Twenty Three,以及101->One Hundred One,不是口語會說的One hundred and One 思路:利用遞迴的方式處理,分別處理該數對10^9的商數、餘數,以此類推,概念不難 但通過率很低(31.3%),可能是因為很多人跟我一樣打錯字? void he_lper(int nums,string &s,vector<string>& filist,vector<string>& tonintenn,vector<string>& tenlist){ if(nums>=(1000000000)){ s+=filist[(nums/(1000000000))]; s+=" Billion"; if(nums%(1000000000)){ s+=" "; he_lper((nums%(1000000000)),s,filist,tonintenn,tenlist); } } else if(nums>=(1000000)){ he_lper((nums/(1000000)),s,filist,tonintenn,tenlist); s+=" Million"; if(nums%(1000000)){ s+=" "; he_lper((nums%(1000000)),s,filist,tonintenn,tenlist); } } else if(nums>=(1000)){ he_lper((nums/(1000)),s,filist,tonintenn,tenlist); s+=" Thousand"; if(nums%(1000)){ s+=" "; he_lper((nums%(1000)),s,filist,tonintenn,tenlist); } } else if(nums>=(100)){ s+=filist[(nums/100)]; s+=" Hundred"; if(nums%(100)){ s+=" "; he_lper((nums%(100)),s,filist,tonintenn,tenlist); } } else if(nums>=10){ if((nums/10)>1){ s+=tenlist[(nums/10)]; if((nums%(10))){ s+=" "; he_lper((nums%(10)),s,filist,tonintenn,tenlist); } } else{ s+=tonintenn[(nums-10)]; return; } } else{ if(nums==0){ if(s==""){ s+="Zero"; } } else{ if(s!=""){ s+=filist[nums]; } else{ s+=filist[nums]; } } } } string numberToWords(int num) { vector<string> fir_dig={"Zero","One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; vector<string> sec_dig={"Zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; vector<string> ten_pate={"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; string ans=""; he_lper(num,ans,fir_dig,ten_pate,sec_dig); return ans; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.239.43 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1723009430.A.D1B.html
oin1104: 大師 08/07 13:52