蓝桥杯基础练习超全习题题解VIP版——BASIC-20.数的读法**(代码一眼就看得懂)

每日刷题(三十六)

BASIC-20、数的读法

蓝桥杯基础练习超全习题题解VIP版——BASIC-20.数的读法**(代码一眼就看得懂)_第1张图片
蓝桥杯基础练习超全习题题解VIP版——BASIC-20.数的读法**(代码一眼就看得懂)_第2张图片
这个题需要极强的逻辑思维能力,而且很多人因为这个题很繁琐就没做了,这是不正确的,人生需要挑战,还有迎难而上的勇气,不畏难不惧难不搞复杂!
这个题目需要注意的有几点:
1)十、十万、十亿的表示
2)数字之间出现零如何处理
3)单位表示

首先要把输入的字符循环遍历,依次读数,根据不同条件输出不同的内容或者不同的选择

详细C代码如下:

#include

int main()
{
	char a[33];
	char b[10][10] = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ", "qi ", "ba ", "jiu "};
	char c[13][10] = {"", "", "shi ", "bai ", "qian ", "wan ", "shi ", "bai ", "qian ", "yi ", "shi ", "bai ", "qian "};
	gets(a);
	int i, len = 0;
	for(i = 0; a[i] != '\0'; i++)
		len++;
	int flag = 0;
	int tag = 0;
	int fl = 0;
	for(i = 0; i < len; i++)    //逐个遍历 
	{
		int j = a[i] - 48;
		if(flag)
		{
			printf("wan ");
			flag = 0;			//失活 
		}
		if(fl)
		{
			printf("yi ");
			fl = 0;				//失活 
		}
		if(j == 0)
		{
			if(len == 1)		//0的情况 
				printf("%s", b[j]);
			else if(i < len - 1)	//不是个位为零的情况 
			{
				if(len > 8 && (len - i == 8 || len - i == 7 || len - i == 6 || len - i == 5))
				{			//数位是亿级的情况,万级数位上都是0的情况则无需输出"万" 
					tag++;
					if(tag == 4)
						flag = 0;
					else if(tag != 4 && len - i == 5)		//万位为零的情况 
					{
						flag = 1;
					}
					else if(a[i + 1] != 48 && len - i != 1)	
						printf("%s", b[j]);
				}
				else if(len - i == 5) 	//数位是万级的情况 
					flag = 1;
				else if(len - i == 9) 
					fl = 1;
				else if(a[i + 1] != 48 && len - i != 1)		//当len>1且i已轮到了个位时 
					printf("%s", b[j]);
			} 
		}
		else if(j == 1 && (len - i == 2 || len - i == 6 || len - i == 10) && (len == 2 || len == 6 || len == 10))
			printf("shi ");			//针对数位是十、十万、十亿的情况 
		else 
			printf("%s%s", b[j], c[len - i]);		//其他一般情况 
	}
	return 0;
}

在这里插入图片描述
感觉离最后一次做题的时间相隔了好久,所以今后我会以每日刷题陪伴大家到省赛甚至国赛

如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,明天我们不见不散!!!

你可能感兴趣的:(蓝桥杯训练题题解)