Newguy


私信TA

用户名:772007765

访问量:82096

签 名:

已秃人士

等  级
排  名 28
经  验 14596
参赛次数 3
文章发表 92
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

TA的其他文章

进制转换2
浏览:783
单词混合
浏览:988
神奇的工号
浏览:891
#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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

你的这个代码还是存在两个问题:
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;
2020-12-19 20:42:09
  • «
  • 1
  • »