#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
你的这个代码还是存在两个问题: 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;