想看題目請點我
#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阿 !!