许久不来,手都有些生疏了。
写个小程序热热手先。
假设有一个数字,可以很大,理论上可以无限大。要如何转成其对应的汉子大写?
就是那种支票本上、汇款单上的那种大写金额。
例如:
数字: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;
}
数字转大写金额C程序

1247

被折叠的 条评论
为什么被折叠?



