⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my.cpp

📁 货币转中文大写人民币。比如说123
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

/*声明获取单词的函数*/
char* get_word(int n);

void main()
{
	char lrs_num[20];        //输入的数字
    char lrs_zs[17];         //整数字符
    char lrs_xs[3];          //小数字符
	char lrs_tmp[5];         //临时数组
	char lrs_total[300];     //输出的字符
	int lri_group_zs=0;      //整数的组数
	int lri_len_zs=0;        //整数位数 
	int lri_len_xs;          //小数位数
	int lri_a1[5]={0};       //整数
	int lri_a2[3]={0};       //小数
	int lri_chk_dot=0;       //小数点个数
    char *prs_dotpos=NULL;   //小数点位置
    int i;
	/*初始化数组*/
	memset(lrs_total,0,sizeof(lrs_total));
	memset(lrs_num,0,sizeof(lrs_num));
	memset(lrs_zs,0,sizeof(lrs_zs));
	memset(lrs_xs,0,sizeof(lrs_xs));
	memset(lrs_tmp,0,sizeof(lrs_tmp));
	
	/*输入*/
input:	
	printf("请输入,整数不能超过16位\n");
	scanf("%s",&lrs_num);
	/*判断字符串合法性*/
	for(i=0;i<strlen(lrs_num);i++)
	{
		if((lrs_num[i]<'0'||lrs_num[i]>'9')&&lrs_num[i]!='.')   //输入的字符串只能为数字和小数点
		{
			printf("输入包含非数字或小数点,请重新输入!\n");
			goto input;
		}
		if(lrs_num[i]=='.')
			lri_chk_dot++;
	}
	
	if(lri_chk_dot>1)                                 //如果小数点过多则报错
	{
		printf("小数点过多!请重新输入!\n");
		lri_chk_dot=0;
		goto input;
	}
	
	prs_dotpos=strchr(lrs_num,'.');                   //获取小数点位置
	
	/*获取字符串长度*/
	if(prs_dotpos)                                    //如果果有小数点则分两部分
	{
		lri_len_zs=prs_dotpos-lrs_num;                //整数长度
		lri_len_xs=strlen(lrs_num)-lri_len_zs-1;      //小数长度
		strncpy(lrs_zs,lrs_num,lri_len_zs);           //整数部分赋值
		strncpy(lrs_xs,prs_dotpos+1,2);               //小数部分赋值
	}
	else
	{
		lri_len_zs=strlen(lrs_num);  
		strcpy(lrs_zs,lrs_num);                    
	}
	if(lri_len_zs>16)
	{
		printf("整数过大!\n");
		exit(0);
	}
	/*得出整数的组数*/
	if(lri_len_zs%4==0)
		lri_group_zs=lri_len_zs/4;
	else
		lri_group_zs=lri_len_zs/4+1;
	
	/*输入为0则直接输出并退出*/
	if(atoi(lrs_zs)==0&&atoi(lrs_xs)==0)   
	{
		printf("零\n");
		exit(0);
	}
	
	/*分组*/
	strrev(lrs_zs);                  //将整数部分字符顺序颠倒
	if(lri_group_zs==1)              //对一组赋值
	{
		lri_a1[1]=atoi(strrev(lrs_zs));
	}
	else if(lri_group_zs==2)         //对二组赋值
	{ 
		lri_a1[2]=atoi(strrev(strncpy(lrs_tmp,lrs_zs,4)));    //由后面圆素往前赋值再把字符顺序还原后转化为整数
		lri_a1[1]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+4,4)));
	}
	else if(lri_group_zs==3)
	{
		lri_a1[3]=atoi(strrev(strncpy(lrs_tmp,lrs_zs,4)));
		lri_a1[2]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+4,4)));
		lri_a1[1]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+8,4)));
	}
	else if(lri_group_zs==4)
	{
		lri_a1[4]=atoi(strrev(strncpy(lrs_tmp,lrs_zs,4)));
		lri_a1[3]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+4,4)));
		lri_a1[2]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+8,4)));
		lri_a1[1]=atoi(strrev(strncpy(lrs_tmp,lrs_zs+12,4)));
	}
	
	if(lri_group_zs!=0)
		printf("整数分成%d组:\n",lri_group_zs);
	
	/*输出整数各分组*/
	for(i=1;i<=lri_group_zs;i++)         
		printf("a1[%d]=%d ",i,lri_a1[i]);
	/*输出小数*/
	if(atoi(lrs_xs)!=0)
		printf("小数为:%s.\n",lrs_xs);
	
	/*循环处理整数的分组*/
	for(i=1;i<=lri_group_zs;i++)      
	{
		if(lri_a1[i]!=0) //如果该组为0则不执行循环体
		{
			if(lri_a1[i]/1000!=0) //千位不为0则打印
			{
				strcat(lrs_total,get_word(lri_a1[i]/1000));
				strcat(lrs_total,"仟");
			}
			
			/*如果前组不为0,千位为0,且不是第一组则打印"零" */
			if(lri_a1[i]/1000==0&&i!=1&&lri_a1[i-1]!=0)                  
				strcat(lrs_total,"零");     
			
			if(lri_a1[i]/100%10!=0)//打印百位                   
			{
				strcat(lrs_total,get_word(lri_a1[i]/100%10));
				strcat(lrs_total,"佰");
			}
			
			/*如果千位不为0,百位为0,十位不为0则打印"零"*/
			if(lri_a1[i]/1000!=0&&lri_a1[i]/100%10==0&&lri_a1[i]/10%10!=0)  
				strcat(lrs_total,"零");
			
			if(lri_a1[i]/10%10!=0) //打印十位
			{
				//if(lri_a1[i]/10%10!=1)          //如果是十几则打印数字
				strcat(lrs_total,get_word(lri_a1[i]/10%10));
				strcat(lrs_total,"拾");
			}
			
			/*十位为0,个位不为0则打印"零"*/
			if((lri_a1[i]>=10)&&lri_a1[i]/10%10==0&&lri_a1[i]%10!=0)
				strcat(lrs_total,"零");
			
			if(lri_a1[i]%10!=0)   //打印个位
				strcat(lrs_total,get_word(lri_a1[i]%10));
			
			/*尾部处理*/
			if(lri_a1[i]!=0&&lri_group_zs!=i)     //非最后一组则打印单位
			{
				if(lri_group_zs==4&&i==1)
					strcat(lrs_total,"兆 ");
				if((lri_group_zs==4&&i==2)||(lri_group_zs==3&&i==1))
					strcat(lrs_total,"亿 ");
				if((lri_group_zs==4&&i==3)||(lri_group_zs==3&&i==2)||(lri_group_zs==2&&i==1))
					strcat(lrs_total,"万 ");
			}
		}
	}
	if(atoi(lrs_zs)!=0)         //如果整数不为0则打印"圆"
		strcat(lrs_total,"圆 ");
	
	/*小数处理*/
	if(atoi(lrs_xs)!=0)
	{
		memset(lrs_tmp,0,sizeof(lrs_tmp));              //初始化临时数组
		lri_a2[1]=atoi(strncpy(lrs_tmp,lrs_xs,1));      //角位
		lri_a2[2]=atoi(strncpy(lrs_tmp,lrs_xs+1,1));    //分位	
		//	printf("%d角,%d分\n",lri_a2[1],lri_a2[2]);  //输出角分
		if(atoi(lrs_zs)!=0&&lri_a1[i-1]%10==0&&lri_a2[1]!=0) //整数不为0,其中个位为0,角位为0则打印零
			strcat(lrs_total,"零");
		if(lri_a2[1]!=0)
		{
			strcat(lrs_total,get_word(lri_a2[1]));
			strcat(lrs_total,"角");
		}
		
		if(lri_a2[2]!=0)   
		{        
			if(atoi(lrs_zs)!=0&&lri_a2[1]==0)       //如果角为0,分不为0则打印"零"
				strcat(lrs_total,"零");        
			strcat(lrs_total,get_word(lri_a2[2]));
			strcat(lrs_total,"分");
		}
	}
	if(lri_a2[2]==0)                                //如果分为0则圆"整"
		strcat(lrs_total,"整");
	
	printf("大写人民币读为:\n%s\n",lrs_total);      //最后输出字符串
}

char* get_word(int n)
{
    if(n==1)
		return "壹";
    if(n==2)
		return "贰";
	if(n==3)
		return "叁";
	if(n==4)
		return "肆";
	if(n==5)
		return "伍";
	if(n==6)
		return "陆";
	if(n==7)
		return "柒";
	if(n==8)
		return "捌";
	if(n==9)
		return "玖";
}

/*分组*/
/*
if(lri_group_zs==1)             //对一组赋值
{
lri_a1[1]=atoi(lrs_zs);
}
else if(lri_group_zs==2)        //对二组赋值
{
if(lri_flag==1)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,1));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+1,4));
}
else if(lri_flag==2)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,2));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+2,4));
}
else if(lri_flag==3)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,3));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+3,4));
}
else 
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,4));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+4,4));
}
}
else if(lri_group_zs==3)            //对三组赋值
{
if(lri_flag==1)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,1));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+1,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+5,4));
}
else if(lri_flag==2)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,2));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+2,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+6,4));
}
else if(lri_flag==3)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,3));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+3,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+7,4));
}
else 
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,4));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+4,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+8,4));
}
}
else if(lri_group_zs==4)          //对四组赋值
{
if(lri_flag==1)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,1));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+1,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+5,4));
lri_a1[4]=atoi(strncpy(lrs_tmp,lrs_zs+9,4));
}
else if(lri_flag==2)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,2));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+2,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+6,4));
lri_a1[4]=atoi(strncpy(lrs_tmp,lrs_zs+10,4));
}
else if(lri_flag==3)
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,3));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+3,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+7,4));
lri_a1[4]=atoi(strncpy(lrs_tmp,lrs_zs+11,4));
}
else 
{
lri_a1[1]=atoi(strncpy(lrs_tmp,lrs_zs,4));
lri_a1[2]=atoi(strncpy(lrs_tmp,lrs_zs+4,4));
lri_a1[3]=atoi(strncpy(lrs_tmp,lrs_zs+8,4));
lri_a1[4]=atoi(strncpy(lrs_tmp,lrs_zs+12,4));
}
}//分组完成
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -