2010年12月25日 星期六

高中 a008: 中文大寫數字



想看題目請點我

#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阿 !!