会计记账

来源:互联网 发布:网络大电影项目策划书 编辑:程序博客网 时间:2024/04/28 20:13

闲来无聊,写一个将任意大的数字转化成大写汉子的程序。

没错,就是会计账本,支票单上的那种大写的金额。

例如:

    数字:193817071803800182801088108

  大写:壹佰玖拾叁亿捌仟壹佰柒拾万柒仟壹佰捌拾亿叁仟捌佰万壹仟捌佰贰拾捌亿零壹佰零捌万捌仟壹佰零捌


代码完整代码如下:

#include <stdio.h>#include <string.h>static const char code[9][4]= {"壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};void bit_4(char * s, int n){    int f = 0;    switch (n){    case 4:        if (s[0] != '0'){            printf("%s仟", code[s[0] - 49]);        }        f = 1;        s += 1;    case 3:        if (s[0] != '0'){            printf("%s佰", code[s[0] - 49]);        }        else if (s[1] != '0') {            printf("零");        }        f = 1;        s += 1;    case 2:        if (s[0] != '0'){            if (s[0] - 49 > 0 || f == 1){                printf("%s拾", code[s[0] - 49]);            }            else{                printf("拾");            }        }        else if (s[1] != '0'){            printf("零");        }        s += 1;    case 1:        if (s[0] != '0'){            printf("%s", code[s[0] - 49]);        }    default:        break;    }}void bit_all (char * s, int n){    if (s[0] == '0'){        while (s[0] == '0') {            s += 1; n -= 1;        }        if (n > 0){            printf("零");        }    }    if (n > 8){        bit_all(s, n - 8);        printf("亿");        bit_all(s + n - 8, 8);    }    else if (n > 4){        bit_all(s, n - 4);        printf("万");        bit_all(s + n - 4, 4);    }    else if (n > 0){        bit_4(s, n);    }}int main(int argc, char *argv[]){    int n, i;    char s[1000] = {'\0'};    fgets(s, 1000, stdin);    n = strlen(s);    s[n - 1] = '\0';    n = strlen(s);    for (i = 0; i < n; i++){        if (s[i] > '9' || s[i] < '0'){            return -1;        }    }    for (i = 0; i < n && s[i] == '0'; i += 1, n -= 1);    bit_all(&s[i], n);    printf("\n");    return 0;}


1 0
原创粉丝点击