開啟章節選單

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;
}