題目原文
題目內容
Bangla數通常會用'kuti' (10000000), 'lakh' (100000), 'hajar' (1000), 'shata' (100)這幾個字來把一個數值轉換成文字。你的任務就是寫一個程式來作這件事。
輸入說明:
輸入檔包含多筆測試資料,每筆測試資料都是一個不超過999999999999999的數字。輸出說明:
對每一筆測試資料輸出一列轉換後的結果,每一列的開頭必須是一個佔四個字元的case number。
Sample Input23764 45897458973958Sample Output
1. 23 hajar 7 shata 64 2. 45 lakh 89 hajar 7 shata 45 kuti 89 lakh 73 hajar 9 shata 58
解法
簡單來說這的意思是要我們把一組數字來用程式解成用口語表達的樣子,舉例來說1100我們會說一千一百,而不會說一一零零。
所以這題對輸入做字串分解,共可以切成五組:kuti、lakh、hajar、shata、常數。切完之後就輸出該組的值以及其代表的文字單位,常數只須輸出值即可。
若該組的值為0,則應該跳過輸出該組,例如輸入1012不應該輸出 1 hajar 0 shata 12。
而對kuti這組來說,如果這裡面的數值長度大於2個字元,則應該繼續對裡面的數遞迴去做字串分解,參考第二個範例輸入。
(以上資料來源:大學程式能力檢定Collegiate Programming Examination(CPE))
程式碼解答
#include <stdio.h>///標頭檔 void numfunction(long long n)///運算式 { if(n/10000000) { numfunction(n/10000000);///由於kuit可能不只小於10000000,所以要一直呼叫在遞回 printf(" kuti"); n%=10000000; if(n>0) printf(" ");///一切看到這個印空白的都是為了格式= = ///格是真的很機車zzz } if(n/100000) { printf("%lld lakh", n/100000); n%=100000; if(n>0) printf(" "); } if(n/1000) { printf("%lld hajar", n/1000); n%=1000; if(n>0) printf(" "); } if(n/100) { printf("%lld shata", n/100); n%=100; if(n>0) printf(" "); } if(n!=0) printf("%lld", n); } int main() { long long n;///由於數字會很大要用long long讀 int count=1;///代表執行了起始值也代表前面表題的起始值 while(scanf("%lld", &n)!=EOF)///讀值讀到沒有為止才停止 { printf("%4d. ", count);///印題號 if(n==0)printf("%d", n); else numfunction(n); printf("\n");//最後每題的換行 count++;///執行完一次後便讓標題+1 } }
程式碼打包:解法一
沒有留言:
張貼留言