📄 my.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 + -