编辑代码

#include <stdio.h>
#include <string.h>

static char nums[][5] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
static char units[][5] = {"", "拾", "佰", "仟"};
static int get_nums(char *s, char *value);

int main()
{
    double money, small;
    int decnum, flag, firstsize, ps, i;

    while (scanf("%lf", &money) != EOF) {
        if (money < 1 && money > 0.001) {
            decnum = (money + 0.005) * 100;
            if (decnum / 10 == 0) {
                printf("%s分\n", nums[decnum % 10]);
            } else if (decnum % 10 == 0) {
                printf("%s角\n", nums[decnum / 10]);
            } else {
                printf("%s角%s分\n", nums[decnum / 10], nums[decnum % 10]);
            }
            continue;
        }
        char value[100] = {0}, mon[100] = {0}, recv[100] = {0};
        
        sprintf(mon, "%d", (int)money);
        printf("strlen(mon)=%d\n",strlen(mon));
        flag = strlen(mon) / 4;
        firstsize = strlen(mon) % 4;
        ps = 0;
         printf("firstsize=%d\nflag=%d\n",firstsize,flag);
        for (i = 0; i < strlen(mon); i++){
            recv[ps] = mon[i];
            ps++;
            printf("ps=%d\n",ps);
            if (ps == 4 || (firstsize != 0 && ps == firstsize)) {
                printf("ps====%d\n",ps);
                printf("recv=%s\n",recv);
                if (get_nums(recv, value) == 0) {
                    if (flag == 0) {
                        strcat(value, "元");
                    } else if (flag == 1 && strlen(mon) == 4) {
                        strcat(value, "元");
                    } else if (flag == 1 && strlen(mon) > 4) {
                        strcat(value, "万");
                    } else if (flag == 2 && strlen(mon) == 8) {
                        strcat(value, "万");
                    } else if (flag == 2 && strlen(mon) > 8) {
                        strcat(value, "亿");
                    } else {
                        printf("error\n");
                    }      
                } else {
                    strcat(value, "元");
                }
                flag--;
                firstsize = 0;
                ps = 0;
            }
        }
        small = (money - (int)money) + 0.005;
        if (small < 0.01) {
            strcat(value, "整");     
        } else {
            char temp[100] = {0};
            decnum = small * 100;
            if (decnum / 10 == 0) { 
                sprintf(temp, "零%s分\n", nums[decnum % 10]);
                strcat(value, temp);
            } else if (decnum % 10 == 0) {              
                sprintf(temp, "%s角\n", nums[decnum / 10]);
                strcat(value, temp); 
            } else {
                sprintf(temp, "%s角%s分\n", nums[decnum / 10], nums[decnum % 10]);
                strcat(value, temp); 
            }        
        }
        printf("%s", value);
    } /* End of while */

    return 0;
}

static int get_nums(char *s, char *value)
{
    int flags, len, i;
    flags = 0;
    len = strlen(s);
    for (i = 0; i < len; i++) {
        if (s[i] > '0') {
            if (flags == 0) {
                strcat(value, nums[s[i] - '0']);
                strcat(value, units[len - i -1]);
            } else {
                 strcat(value, nums[0]);
                 strcat(value, nums[s[i] - '0']);
                 strcat(value, units[len - i -1]);
                 flags = 0;
            }
        } else { 
            flags++;
        }
    }
    if (flags == len) {
        return -1;
    }

    return 0;
}