2017/3/19

10101 - Bangla Numbers

#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

沒有留言:

張貼留言