# Bangla Numbers(UVA10101) ## [程式繳交區](https://hackmd.io/@Renektonn/rk_M3qcv1e/edit) ## 題目 [點我](https://onlinejudge.org/external/101/10101.pdf) ## 解題系統 [UVA](https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=13&page=show_problem&problem=1042) [ZJ](https://zerojudge.tw/ShowProblem?problemid=a741) ## 解題步驟 #### 1. 了解題意 將一個數轉為另一種表達方式 ’kuti’ (10000000), ’lakh’ (100000), ’hajar’ (1000), ’shata’ (100) #### 2. 設計演算法 想法: - 由大到小,取整再取餘。 問題: - 轉換後如果可以轉,還要繼續轉,比如說45897458973958不能轉為 4589745 kuti 89 lakh 73 hajar 9 shata 58 而是 45 lakh 89 hajar 7 shata 45 kuti 89 lakh 73 hajar 9 shata 58 想法: - 用recursion轉換 #### 3. 確定測資範圍 - a non-negative number ≤ 999999999999999. 所以用long long存,也有可能出現0 - 如果n = 10000001,那要輸出1 kuti 1,還是1 kuti 0 lakh 0 hajar 0 shata 1 是前者 ## 演算法 ```= re(n): 輸入阿拉伯數字n,輸出(回傳值)n的Bangla number 1. k = n / 10000000,代表kuti的數量,若k大於0,呼叫re(k),再輸出kuti 2. d = n % 10000000,利用智慧找零系統的方式,算出d的Bangla number ``` :::warning 要約定好空格是由誰負責輸出! ::: ``` 1. 宣告cas = 1 2. 輸入n(long long int),如果沒東西,則結束 3. 輸出cas,固定4格寬,若n為0,輸出" 0\n",否則,呼叫re(n),輸出"\n" 4. cas++ ``` ## 程式碼 ```cpp= #include <bits/stdc++.h> #define int long long int using namespace std; void re (int n) { int k = n / 10000000; if (k > 0) { re(n / 10000000); cout << " kuti"; } int d = n % 10000000; if (d >= 100000) { cout << " " << d / 100000 << " lakh"; d %= 100000; } if (d >= 1000) { cout << " " << d / 1000 << " hajar"; d %= 1000; } if (d >= 100) { cout << " " << d / 100 << " shata"; d %= 100; } if (d > 0) { cout << " " << d; } } signed main(){ int n; int cas = 1; while (cin >> n) { printf("%4lld.", cas); if (n == 0) { cout << " 0" << endl; } else { re(n); cout << endl; } cas++; } return 0; } ``` :::warning re(n)會固定在開頭輸出一個空白字元 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up