1082 Read Number in Chinese (25 分)

1082 Read Number in Chinese (25 分)

题意

给出一个整数,要求输出它的中文读法。
如“-123456789” 读作 “Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu”
“100800”读作“yi Shi Wan ling ba Bai”

思路

模拟,由于数字的位数很少,可以直接暴力求解。把数分为三组
个位到千位 | 万位到千万位 | 亿
转化为个位到千位的读法。判断各组的相对位置,第一组直接输出,第二组最后加个万,第三组加个亿。
注意数中的‘0’,一组内末尾的零不读,相连的零只读一个。注意0这个数,注意空格。

代码

#include<stdio.h>
#include<string.h>

char figure[12][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char weight[12][10]={"","Shi","Bai","Qian","Wan","Yi"};
int main()
{
	char number[20];
	int len,star=0,flag=0;
	scanf("%s",number);
	len=strlen(number);
	if(len==1&&number[0]=='0'){
		printf("ling");
	}else{
		if(number[0]=='-'){
			printf("Fu ");
			star=1;
			len-=1;
		}
		for(int i=star;i<star+len;i++){
			if(i!=star&&number[i]!='0'){
				printf(" ");
			}
			if(number[i]!='0'){
				if(flag!=0){
					printf("ling ");
					flag=0;
				}
				printf("%s",figure[number[i]-'0']);
				flag=0;
				if((star+len-i-1)%4!=0){
					printf(" %s",weight[(star+len-i-1)%4]);
				}
			}else{
				if(flag==0){
	//				printf("ling");
					flag++;
				}
			}
			if((star+len-i)%4==1&&star+len-i>4){
				printf(" %s",weight[(star+len-i)/4+3]);
				flag=0;
			}
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值