https://www.patest.cn/contests/pat-a-practise/1082
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output "Fu" first if it is negative. For example, -123456789 is read as "Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu". Note: zero ("ling") must be handled correctly according to the Chinese tradition. For example, 100800 is "yi Shi Wan ling ba Bai".
Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.
Output Specification:
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
Sample Input 1:-123456789Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiuSample Input 2:
100800Sample Output 2:
yi Shi Wan ling ba Bai
此题天坑,据说是姥姥前期出题控制不好难度导致。最后用很丑陋的方法写出来了。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
int main() {
char n[15] = { 0 };
int d,j;
gets_s(n);
char a[4][5] = { "Wan","Shi","Bai","Qian"};
char b[10][5] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
bool f1=false ,f2=false,f3=false;
int l = strlen(n),p=0;
if (n[0] == '-') {
printf("Fu ");
for (int i = 1; i < l; i++)
n[i - 1] = n[i];
n[l - 1] = '\0';
l--;
}
for (int i = 0; i < l; i++) {
d = n[i] - '0';
j = l - i;
int dw = (j - 1)/4,dw2=(j-1)%4;
if (dw == 2) {
printf("%s", b[d]);
printf(" Yi");
}
else if (dw == 1) {
if (d == 0) {
f1 = true;
if (f2&&dw2 == 0) printf(" Wan");
continue;
}
else {
f2 = true;
if (f1) {
printf(" ling");
f1 = false;
}
if (i != 0) printf(" ");
printf("%s", b[d]);
printf(" %s", a[dw2]);
}
}
else if (dw == 0) {
if (d == 0) {
if (l==1) printf("ling");
f3 = true;
continue;
}
else {
if (f3) {
printf(" ling");
f3 = false;
}
if (i != 0) printf(" ");
printf("%s", b[d]);
if(dw2!=0) printf(" %s", a[dw2]);
}
}
}
return 0;
}