给定一个数值,输出符合中国人习惯的读法--记一道笔试题
生活随笔
收集整理的這篇文章主要介紹了
给定一个数值,输出符合中国人习惯的读法--记一道笔试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:給定一個數字,最大小于一萬億,輸出符合中國人習慣的讀法,例如:
? a、12輸出:十二
? b、102輸出:一百零二
? c、1002輸出:一千零二
? d、112輸出:一百十二
? e、10112輸出:一萬零一百十二
? f、120000000:一億二千萬
? g、11021002:一千一百零二萬一千零二
? h、11020102:一千一百零二萬零一百零二
? i、1000001:一百萬零一
? 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 } View Code?
轉載于:https://www.cnblogs.com/eagleli/p/4584216.html
總結
以上是生活随笔為你收集整理的给定一个数值,输出符合中国人习惯的读法--记一道笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AngularJS学习笔记一:简单入门
- 下一篇: API(Application Prog