開啟章節選單

10101 Bangla Numbers

題目連結

題目敘述

在孟加拉(Bangla)數字系統中,數字會被拆分並使用以下單位來表示其文字形式:

  • kuti (千萬,10,000,000)
  • lakh (十萬,100,000)
  • hajar (一千,1,000)
  • shata (一百,100)

現在你要撰寫一個程式,將一個整數轉換成使用上述單位的文字表示法

輸入說明

輸入包含多筆測資
每筆測資是一個不超過 999999999999999 的非負整數(最多 15 位數)

輸出說明

行首為測資編號,使用 4 個寬度對齊(前補空白),後面接著一個英文句點與空格
然後輸出該數字對應的 Bangla 文字形式

解題思路

  1. 使用遞迴處理「kuti」群組
    • 程式的 printBangla(n) 函式使用遞迴方式處理每一組數字,只要數字超過 10,000,000,就會再呼叫自己來處理更高位的部分,這樣可以自動處理多層次的 kuti 結構
  2. 分別處理 lakh、hajar、shata 和剩下的數字
  3. 特別處理數字是 0 的情況
  4. 格式化 Case 編號(四欄對齊)

程式碼

#include <bits/stdc++.h>
#define int long long
using namespace std;

void printBangla(int n){
    if(n>=10000000){
        printBangla(n/10000000);
        cout<<" kuti";
        n%=10000000;
    }
    if(n>=100000){
        cout<<" "<<n/100000<<" lakh";
        n%=100000;
    }
    if(n>=1000){
        cout<<" "<<n/1000<<" hajar";
        n%=1000;
    }
    if(n>=100){
        cout<<" "<<n/100<<" shata";
        n%=100;
    }
    if(n>0)cout<<" "<< n;
}

signed main(){
    int n;
    int Case = 1;
    while(cin>>n){
        string str_Case = to_string(Case);
        string space((4-str_Case.size()),' ');
        cout<<space<<Case++<< ".";
        if(n==0)cout<<" 0";
        else printBangla(n);
        cout<<endl;
    }
    return 0;
}