想看題目請點我
#include<iostream> using namespace std ; int main(){ string n ; string number[10] = {"零","壹","貳","參","肆","伍","陸","柒","捌","玖"} ; string unit1[3] = {"拾","佰","仟"} ; // unit1 與 unit2 差別在於會重複出現 ex 111111 會重複出現 "拾" string unit2[2] = {"萬","億"} ; while(getline(cin,n)) { int zlength ; for(int i=0 ; i < n.length() ; i++) if(n[n.length()-i-1]!='0') // 由右往左找 0 的總數 ex 100 , zlength = 2 { zlength=i; break; } for(int i=0 ; i < n.length() ; i++) { if(n[i] != '0') { cout << number[n[i]-48] ; if((n.length()-i-1)%4 != 0) // 顯示 "拾" "佰" "仟" cout << unit1[((n.length()-i-1)%4)-1] ; } if((n.length()-i-1)%4 == 0 && (n.length()-i-1) >0) // 顯示 "萬" "億" cout << unit2[((n.length()-i-1)/4)-1] ; if(n[i]=='0'&&n[i-1]!='0' && i < n.length()-zlength) // 避免有 壹拾萬 這一類的 cout << number[0] ; } cout << endl; } }
這題小弟也解了好久 ,
總是有些小錯誤 ,
最後看了某位高手的程式才恍然大悟阿~
這題要注意的部分就只有 "拾" "佰" "仟" "萬" "億" ,
其他顯示的部分我想大家跟我一樣是不會有錯誤的,
"拾" "佰" "仟" 與 "萬" "億" 有個致命的不同點 ,
就是 "拾" "佰" "仟" 會重複顯示 ,
"萬" "億" 不會重複顯示 ,
另外還有要計算最後有多少個零串在一起 ,
就可以簡單度過這一題了 ,
看來小弟分析題目的能力還有一大段路要走阿~ 這題困難度2阿 !!