題目:給定一個數字,最大小於一萬億,輸出符合中國人習慣的讀法,例如:ios
a、12輸出:十二ide
b、102輸出:一百零二spa
c、1002輸出:一千零二翻譯
d、112輸出:一百十二code
e、10112輸出:一萬零一百十二blog
f、120000000:一億二千萬input
g、11021002:一千一百零二萬一千零二string
h、11020102:一千一百零二萬零一百零二it
i、1000001:一百萬零一io
j、1000000001:十億零一
嗯,一道筆試題,解的很沒有節操,沒有太好的思路,只能盡力抽取翻譯過程當中的共有代碼,儘可能寫的不那麼難看。
基本思路就是把輸入的數補全爲12位,而後三等分,分別轉換計算,而後拼接起來。
PS:感受中文語言坑比較多,越寫越醜。
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 5 //判斷該位置後是否還有非零數 6 bool NoPosAfter(std::string str, int index) 7 { 8 int len = str.size(); 9 for(int i = index+1; i < len; ++i) 10 { 11 if(str[i] != '0')return false; 12 } 13 return true; 14 } 15 16 std::string convert(std::string str) 17 { 18 std::vector<std::string> unit{"", "十", "百", "千"}; 19 std::vector<std::string> num{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; 20 21 std::string ret(""); 22 23 int i = 0; 24 while(i < 4 && str[i] == '0') ++i; 25 if(i == 4) return ret; 26 while(i < 4) 27 { 28 if(str[i] == '0') 29 { 30 if(NoPosAfter(str, i)) 31 { 32 return ret; 33 } 34 else 35 { 36 if(i > 0) 37 if(str[i-1] != '0') 38 ret += "零"; 39 } 40 } 41 else 42 { 43 ret += num[str[i]-'0'] + unit[3-i]; 44 } 45 ++i; 46 } 47 48 return ret; 49 } 50 51 void print(std::string input) 52 { 53 std::string cstr(12, '0'); 54 cstr.replace(12-input.size(), input.size(), input); 55 56 std::string Ystr(cstr, 0, 4); 57 std::string Wstr(cstr, 4, 4); 58 std::string Lstr(cstr, 8, 4); 59 60 std::string result; 61 62 auto Yret = convert(Ystr); 63 auto Wret = convert(Wstr); 64 auto Lret = convert(Lstr); 65 66 bool high = false;//高位標誌 67 if(Yret.size() != 0) 68 { 69 result += Yret + "億"; 70 high = true; 71 } 72 73 if(Wret.size() != 0) 74 { 75 if(Wstr < "1000" && high) result += "零"; 76 result += Wret + "萬"; 77 high = true; 78 } 79 else if(Lret.size() != 0) 80 { 81 if(high)result += "零"; 82 } 83 84 if(Lret.size() != 0) 85 { 86 if(Lstr < "1000" && high && Wret.size()) result += "零"; 87 result += Lret; 88 } 89 90 if(result.find("一十") == 0) 91 { 92 result.erase(0, 2); 93 } 94 95 std::cout << result << std::endl; 96 } 97 98 int main() 99 { 100 print("112"); 101 print("10112"); 102 print("120000000"); 103 print("11021002"); 104 print("11020102"); 105 print("1000001"); 106 107 return 0; 108 }