会计记账小程序
程序员文章站
2022-05-31 10:06:52
...
许久不来,手都有些生疏了。
写个小程序热热手先。
假设有一个数字,可以很大,理论上可以无限大。要如何转成其对应的汉子大写?
就是那种支票本上、汇款单上的那种大写金额。
例如:
数字: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; }
上一篇: 机战v
下一篇: 小的计时器程序(多线程+生命周期)