蓝桥杯 基础练习 数的读法 C语言实现
问题描述:任务是帮他设计这样一个系统:给定一个阿拉伯数字串,你帮他按照中文读写的规范转为汉语拼音字串,相邻的两个音节用一个空格符格开。注意必须严格按照规范,比如说“10010”读作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”读作“shi wan”而不是“yi shi wan”,“2000”读作“er qian”而不是“liang qian”。
输入格式:有一个数字串,数值大小不超2,000,000,000。
输出格式:是一个由小写英文字母,逗号和空格组成的字符串,表示该数的英文读法。
样例输入:1234567009
样例输出:shi er yi san qian si bai wu shi liu wan qi qian ling jiu
#include<stdio.h>
#include<string.h>
int main()
{
char s[20];
scanf("%s",&s);
char shu[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//用于存储数的数组
char d[6][10]={" ","shi","bai","qian","wan","yi"};//用于存储位数的数组
int l;//存储长度
int p;//用于存储标志字符
int flag=0;
int i,j;
l=strlen(s);
for(i=0;i<l;i++)//对所有数进行处理,从最高位数字开始
{
if(l-i>=9)
p=9;//最后有个yi(“亿”位上有一个或两个数字)
else
if(l-i>=5)
p=5;//最后有个wan(以“万”为单位是1~4个数字)
else
p=1;//最后啥都没有(是个位),只有(个位~千位)
j=l-p-i;//以4位未划分的位上,有几个数字
//即以yi,wan,ge为单位的数是几位数
if(s[i]!='0')//需要读出来的数
{
if(i>=1&&s[i-1]=='0')//前边有0(不是最高位的情况下,因为最高位没有前一位)
printf("ling ");
if(!(i==0&&s[i]=='1'&&j==1))//最高位为1,且最高位是在 “十”位上,----整体的相反情况,,,直接输出数字
//即,不是最高位,或者最高位不为1,或者最高位不是在“十位”上,----直接输出
printf("%s ",shu[s[i]-'0']);
if(j!=0)//不是基数位时,按照读的规则输出
printf("%s ",d[j]);
flag=1;
}
if(j==0)//是基数位时,输出基数位
{
if(p==9)
{
printf("%s ",d[5]);
// printf("%d ",flag);
flag=0;
// printf("%d ",flag);
}
else
if(p==5)
{
if(flag==1)
printf("%s ",d[4]);
}
}
}
return 0;
}