#include <stdio.h> #include <string.h> void gewei(char geweishu) { switch (geweishu) { case '0': printf("零"); break; case '1': printf("壹"); break; case '2': printf("贰"); break; case '3': printf("叁"); break; case '4': printf("肆"); break; case '5': printf("伍"); break; case '6': printf("陆"); break; case '7': printf("柒"); break; case '8': printf("捌"); break; case '9': printf("玖"); break; } } void shiwei(char shiweishu) { switch (shiweishu) { case '1': printf("拾"); break; default: gewei(shiweishu); printf("拾"); } } void qianwei(char n[], int index) { gewei(n[index - 7]); printf("仟"); if (n[index - 6] == '0' && n[index - 5] == '0' && n[index - 4] == '0') { // 如果全是0不用输出“零” } else if (n[index - 6] == '0' && n[index - 5] == '0') { // 如果百位和十位是0,个位不是0,那么输出“零”加个位数的数字 printf("零"); gewei(n[index - 4]); } else if (n[index - 6] == '0' && n[index - 4] == '0') { // 如果百位是0和个位是0,输出“零”加十位数 printf("零"); shiwei(n[index - 5]); } else if (n[index - 5] == '0' && n[index - 4] == '0') { // 如果百位不是0,个位和十位是0,那么输出百位就可以了 gewei(n[index - 6]); printf("佰"); } else if (n[index - 6] == '0') { // 如果只有百位是0,输出0然后输出十位和个位 printf("零"); shiwei(n[index - 5]); gewei(n[index - 4]); } else if (n[index - 5] == '0') { // 如果只有十位是0,输出百位然后输出0然后输出个位 gewei(n[index - 6]); printf("佰零"); gewei(n[index - 4]); } else if (n[index - 4] == '0') { // 如果只有个位是0,不用写0,输出百位十位就可以了 gewei(n[index - 6]); printf("佰"); shiwei(n[index - 5]); } else { // 如果没有0那么我们全部输出 gewei(n[index - 6]); printf("佰"); shiwei(n[index - 5]); gewei(n[index - 4]); } } int main() { char n[100]; while (scanf("%s", n) != EOF) { printf("人民币"); int len = strlen(n); if (len == 12) { // 如果有亿位 gewei(n[len - 12]); printf("亿"); strncpy(n, n + 1, 11); len = 11; } if (len == 11) { // 如果有千万位, qianwei(n, 7); printf("万"); strncpy(n, n + 4, 7); len = 7; } if (len == 10) { // 如果有百万位,先输出百万,然后按照千位继续 gewei(n[len - 10]); printf("佰"); if (n[len - 9] == '0') { printf("零"); } else { shiwei(n[len - 9]); if (n[len - 8] == '0') { // 不用输出零 } else { gewei(n[len - 8]); } } printf("万"); strncpy(n, n + 3, 7); len = 7; } if (len == 9) { // 如果有十万位,先输出几十几万然后再按照千位的继续 shiwei(n[len - 9]); if (n[len - 8] == '0') { // 不用输出零 } else { gewei(n[len - 8]); } printf("万"); strncpy(n, n + 2, 7); // printf("%s", n); len = 7; } if (len == 8) { // 如果有万位,先输出几万 gewei(n[len - 8]); printf("万"); // 然后判断0,如果千位不是0,那么我们按照千位的方法继续 if (n[len - 7] != '0') { strncpy(n, n + 1, 7); len = 7; // 如果千位是0,百位不是0,我们输出0然后按照百位的方法继续 } else if (n[len - 7] == '0' && n[len - 6] != '0') { printf("零"); strncpy(n, n + 2, 6); len = 6; // 如果千位百位都是0,十位不是0我们输出0然后按照十位的方法继续 } else if (n[len - 7] == '0' && n[len - 6] == '0' && n[len - 5] != '0') { printf("零"); strncpy(n, n + 3, 5); len = 5; } else if (n[len - 7] == '0' && n[len - 6] == '0' && n[len - 5] == '0' && n[len - 4] != '0') { printf("零"); strncpy(n, n + 4, 4); len = 4; } } if (len == 4) { // 如果长度为4,只有个位 if(n[len - 4] != '0') gewei(n[len - 4]); } else if (len == 5) { shiwei(n[len - 5]); if (n[len - 4] == '0') { // 不用输出零 } else { gewei(n[len - 4]); } } else if (len == 6) { gewei(n[len - 6]); printf("佰"); if (n[len - 5] == '0') { printf("零"); } else { shiwei(n[len - 5]); if (n[len - 4] == '0') { // 不用输出零 } else { gewei(n[len - 4]); } } } else if (len == 7) { gewei(n[len - 7]); printf("仟"); if (n[len - 6] == '0' && n[len - 5] == '0' && n[len - 4] == '0') { // 如果全是0不用输出“零” } else if (n[len - 6] == '0' && n[len - 5] == '0') { // 如果百位和十位是0,个位不是0,那么输出“零”加个位数的数字 printf("零"); gewei(n[len - 4]); } else if (n[len - 6] == '0' && n[len - 4] == '0') { // 如果百位是0和个位是0,输出“零”加十位数 printf("零"); shiwei(n[len - 5]); } else if (n[len - 5] == '0' && n[len - 4] == '0') { // 如果百位不是0,个位和十位是0,那么输出百位就可以了 gewei(n[len - 6]); printf("佰"); } else if (n[len - 6] == '0') { // 如果只有百位是0,输出0然后输出十位和个位 printf("零"); shiwei(n[len - 5]); gewei(n[len - 4]); } else if (n[len - 5] == '0') { // 如果只有十位是0,输出百位然后输出0然后输出个位 gewei(n[len - 6]); printf("佰零"); gewei(n[len - 4]); } else if (n[len - 4] == '0') { // 如果只有个位是0,不用写0,输出百位十位就可以了 gewei(n[len - 6]); printf("佰"); shiwei(n[len - 5]); } else { // 如果没有0那么我们全部输出 gewei(n[len - 6]); printf("佰"); shiwei(n[len - 5]); gewei(n[len - 4]); // printf(" test %c", n[len]); } } if(n[len - 4] != '0') printf("元"); if (n[len - 2] == '0' && n[len - 1] == '0') { printf("整\n"); } else if (n[len - 2] != '0') { gewei(n[len - 2]); printf("角"); if (n[len - 1] == '0') printf("\n"); } if (n[len - 1] != '0') { gewei(n[len - 1]); printf("分\n"); } } return 0; }