1082. Read Number in Chinese (25)

来源:互联网 发布:淘宝五颗心 编辑:程序博客网 时间:2024/06/05 02:11
#include <iostream>#include <cstdio>#include <vector>using namespace std;char *pron[] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };inline const char * unit(int i) {if(i == 1000)return " Qian";else if(i == 100)return " Bai";else if(i == 10)return " Shi";return "";}int print(int n, char str[], int pos, int &pd) {if(n > 0 && n < 10000) {for(int tmp = n, i = 1000; ; i /= 10) {int d = tmp/i;if(d) {pos += sprintf(str+pos, "%s %s%s", pd == 0 ? " ling" : "", pron[tmp/i], unit(i));pd = d;}else if(pd >= 0) {pd = 0;}if(i == 1)break;tmp %= i;}}return pos;}int main(int argc, char **argv) {long long n;cin >> n;bool sign = true;if(n < 0) {sign = false;n = -n;}char str[1000] = {};int pos = 0;if(n) {if(!sign) {pos = sprintf(str, "Fu");}int pd = -1;int npos = print(n/100000000LL, str, pos, pd);if(npos > pos) {pos = npos;pos += sprintf(str+pos, " Yi");}n %= 100000000LL;npos = print(n/10000LL, str, pos, pd);if(npos > pos) {pos = npos;pos += sprintf(str+pos, " Wan");}n %= 10000LL;print(n, str, pos, pd);printf("%s\n", str[0] != ' ' ? str : str+1);}else {printf("ling\n");}return 0;} 

0 0
原创粉丝点击