PAT刷题记录
1004 甲级 read number in Chinese
此代码为暴力解法,不提倡采用 (应该有更好的方法待发掘,比如直接计算)
```cpp
#include "stdio.h"
#include "math.h"
#include "string.h"
void read(int n)
{ if (n == 0) printf("ling"); else if (n == 1) printf("yi"); else if (n == 2) printf("er"); else if (n == 3) printf("san"); else if (n == 4) printf("si"); else if (n == 5) printf("wu"); else if (n == 6) printf("liu"); else if (n == 7) printf("qi"); else if (n == 8) printf("ba"); else if (n == 9) printf("jiu");}
void danwei(int n)
{ if (n == 0) read(n); if (n == 1) printf("Shi"); if (n == 2) printf("Bai"); if (n == 3) printf("Qian"); if (n == 4) printf("Wan"); if (n == 9) printf("Yi");}
int main()
{ char s[11]; int num; scanf("%s", s,11); num = strlen(s); int ss[11]; if (s[0] == 45) { printf("Fu "); for (int i = 1; i < num; i++) ss[i] = s[num - i] - 48; for (int i = num - 1; i > 1; i--) if (i == 9) { read(ss[i]); printf(" "); danwei(i); printf(" "); } else { if (ss[i] == 0) { if (ss[i - 1]&&i%5!=0) { read(ss[i]); printf(" "); } if(i%5==0 && (ss[i + 1] != 0 || ss[i + 2] != 0 || ss[i + 3] != 0)) { danwei(i-1); printf(" "); } if (i % 5 == 0 && ss[i - 1] != 0 && ss[i + 1] == 0 && ss[i + 2] == 0 && ss[i + 3] == 0) { read(ss[i]); printf(" "); } } else { read(ss[i]); printf(" "); if (i != 5) danwei((i - 1) % 4); else danwei(i - 1); printf(" "); } } if (ss[1] || num == 1) read(ss[1]); printf("\n"); } else { for (int i = 0; i < num; i++) ss[i] = s[num - i - 1] - 48; for (int i = num - 1; i > 0; i--) if (i == 8) { read(ss[i]); printf(" "); danwei(i+1); printf(" "); } else { if (ss[i] == 0) { if (ss[i - 1] != 0&&i%4!=0) { read(ss[i]); printf(" "); } if (i % 4 == 0&&ss[i-1]!=0&&(ss[i+1]!=0||ss[i+2]!=0||ss[i+3]!=0)) { danwei(i); printf(" "); read(ss[i]); printf(" "); } if (i % 4 == 0 && ss[i - 1] != 0 && ss[i + 1] == 0 && ss[i + 2] == 0 && ss[i + 3] == 0) { read(ss[i]); printf(" "); } } else { read(ss[i]); printf(" "); if (i != 4) danwei(i % 4); else danwei(i); printf(" "); } } if (ss[0] || num == 1) read(ss[0]); printf("\n"); }}