開啟章節選單
10101 Bangla Numbers
題目連結
題目敘述
在孟加拉(Bangla)數字系統中,數字會被拆分並使用以下單位來表示其文字形式:
kuti
(千萬,10,000,000)lakh
(十萬,100,000)hajar
(一千,1,000)shata
(一百,100)
現在你要撰寫一個程式,將一個整數轉換成使用上述單位的文字表示法
輸入說明
輸入包含多筆測資
每筆測資是一個不超過 999999999999999
的非負整數(最多 15 位數)
輸出說明
行首為測資編號,使用 4 個寬度對齊(前補空白),後面接著一個英文句點與空格
然後輸出該數字對應的 Bangla 文字形式
解題思路
- 使用遞迴處理「kuti」群組
- 程式的
printBangla(n)
函式使用遞迴方式處理每一組數字,只要數字超過10,000,000
,就會再呼叫自己來處理更高位的部分,這樣可以自動處理多層次的 kuti 結構
- 程式的
- 分別處理 lakh、hajar、shata 和剩下的數字
- 特別處理數字是
0
的情況 - 格式化 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; }