開啟章節選單
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; }