#include<iostream> using namespace std; void printNumber( long long n ){ if( n == 0 ) return; if( n/10000000 ){ printNumber( n/10000000 ); cout<<" kuti"; n %= 10000000; } if( n/100000 ){ printNumber( n/100000 ); cout<<" lakh"; n %= 100000; } if( n/1000 ){ printNumber( n/1000 ); cout<<" hajar"; n %= 1000; } if( n/100 ){ //764 printNumber( n/100 ); cout<<" shata"; n %= 100; } if( n ) cout<<" "<<n; } int main(){ long long n; int serialNumber = 1;//serialNumber是每筆測試資料的編號 while(cin >> n && n != 0){ cout<<serialNumber<<"."; if( n ) printNumber( n ); serialNumber++; } return 0; }上面程式碼原作者在這http://knightzone.org/?p=1789,我稍微修改,功能也完整
來追蹤一次,設n=764
第一次在main中printNumber(n)呼叫,先做if( n/100 )的敘述,
第二次在if( n/100 )中的printNumber(n/100)呼叫遞迴,764/100=7,丟進7這參數進去,
最後會執行第30行的if,印出7,這次呼叫完畢。
會回到第一次繼續執行,故印出 shata,接著再執行n %= 100; n計算後為64
再做30行敘述,印出64
而其他同理,因數字大就不追蹤了。
以下是我寫失敗的程式碼:
//http://bit.ly/2nDnxrI //764 7 shata 64 #include<iostream> using namespace std; int howManyPlace(int n){//回傳這個數字有幾位數 int count = 0; while (n != 0) { n = n / 10; count++; } return count; } int main() { int serialNumber = 0; int n = 0; while (cin >> n && n != 0) { serialNumber++; if(howManyPlace(n) == 3){ cout<<serialNumber<<". "<<n/100<<" shata "<<n%100; } if(howManyPlace(n) == 5){ int a,b,c; a = n/1000; b = (n%1000)/100; c = n%100; cout<<serialNumber<<". "<<a<<" hajar "<<b<<" shata "<<c; } } return 0; }題目網址:http://bit.ly/2nDnxrI
沒有留言:
張貼留言