#include <stdio.h> //自己写的不堪入目 #include <string.h> int main() { char money[100]; while (scanf("%s",money)!=EOF) { int z_len=0,len=0,i,cheak=1; char *p; p=strchr(money,'.'); if (p) { *p='\0'; cheak=0; } len=z_len=strlen(money); for (i=0;i<len;i++,z_len--) { int count; switch (money[i]) { case '0': if (money[i+1]!='0') { printf("零"); break; } else 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; } if (money[i]=='0'||z_len==1) continue; if (z_len<=9) count=z_len-1; else count=z_len-9; switch (count) { case 8: printf("亿"); break; case 7: printf("仟"); break; case 6: printf("佰"); break; case 5: printf("拾"); break; case 4: printf("万"); break; case 3: printf("仟"); break; case 2: printf("佰"); break; case 1: printf("拾"); break; } } if (cheak) printf("元整\n"); else { printf("元"); switch (money[i+1]) { case '0': if (money[i+2]!='0') { printf("零"); break; } else 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; } printf("角"); if (!money[i+2]) printf("\n"); else { switch (money[i+2]) { case '0': if (money[i+3]!='0') { printf("零"); break; } else 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; } printf("分\n"); } } } return 0; }
描述
读入一个浮点数值,将其转化为金额的中文大写形式。
例如:
123.45转化为“壹佰贰拾叁元肆角伍分”。
1)当金额为整数时,只表示整数部分,省略小数部分,并添加“整”字。
例如:123表示为“壹佰贰拾叁元整”
2)当金额中有连续的0时(含一个0),只需写一个“零”即可。
例如:10005表示为“壹万零伍元整”
3)10元缩写为“拾元整”。
输入
表示金额的浮点数若干,每行一个
输出
各金额的中文大写形式,每行一个 注:数字 壹贰叁肆伍陆柒捌玖拾佰仟万亿 单位 元角分
样例输入1
123.45
123
10005
10
样例输出1
壹佰贰拾叁元肆角伍分
壹佰贰拾叁元整
壹万零伍元整
拾元整
0.0分
0 人评分
你的这个代码还是存在两个问题: 1、“拾元整”这个特殊情况没有处理 2、当数字为“XXX0”,即除了整数个位为零,整数的十位为非零的状态下,结果会是“X拾零元” 应该对这两个情况做分别的处理,只要在switch (money[i])的地方对case'0'和case'1'分别添加长度限制即可 我的修改如下: case '0': if ((money[i + 1] != '0') && (i != len - 1)) //如果不是两个及以上的零 { printf("零"); break; } else break; case '1': if(z_len == 2) break; printf("壹"); break;
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:424 |
大小写转换 (C语言代码)浏览:839 |
简单的a+b (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:676 |
【绝对值排序】 (C语言代码)浏览:819 |
三角形 (C语言代码)浏览:903 |
数对 (C语言代码)浏览:697 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:676 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:532 |
核桃的数量 (C语言代码)浏览:825 |