?? my.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
/*聲明獲取單詞的函數(shù)*/
char* get_word(int n);
void main()
{
char lrs_num[20]; //輸入的數(shù)字
char lrs_zs[17]; //整數(shù)字符
char lrs_xs[3]; //小數(shù)字符
char lrs_tmp[5]; //臨時數(shù)組
char lrs_total[300]; //輸出的字符
int lri_group_zs=0; //整數(shù)的組數(shù)
int lri_len_zs=0; //整數(shù)位數(shù)
int lri_len_xs; //小數(shù)位數(shù)
int lri_a1[5]={0}; //整數(shù)
int lri_a2[3]={0}; //小數(shù)
int lri_chk_dot=0; //小數(shù)點個數(shù)
char *prs_dotpos=NULL; //小數(shù)點位置
int i;
/*初始化數(shù)組*/
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("請輸入,整數(shù)不能超過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]!='.') //輸入的字符串只能為數(shù)字和小數(shù)點
{
printf("輸入包含非數(shù)字或小數(shù)點,請重新輸入!\n");
goto input;
}
if(lrs_num[i]=='.')
lri_chk_dot++;
}
if(lri_chk_dot>1) //如果小數(shù)點過多則報錯
{
printf("小數(shù)點過多!請重新輸入!\n");
lri_chk_dot=0;
goto input;
}
prs_dotpos=strchr(lrs_num,'.'); //獲取小數(shù)點位置
/*獲取字符串長度*/
if(prs_dotpos) //如果果有小數(shù)點則分兩部分
{
lri_len_zs=prs_dotpos-lrs_num; //整數(shù)長度
lri_len_xs=strlen(lrs_num)-lri_len_zs-1; //小數(shù)長度
strncpy(lrs_zs,lrs_num,lri_len_zs); //整數(shù)部分賦值
strncpy(lrs_xs,prs_dotpos+1,2); //小數(shù)部分賦值
}
else
{
lri_len_zs=strlen(lrs_num);
strcpy(lrs_zs,lrs_num);
}
if(lri_len_zs>16)
{
printf("整數(shù)過大!\n");
exit(0);
}
/*得出整數(shù)的組數(shù)*/
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); //將整數(shù)部分字符順序顛倒
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))); //由后面圓素往前賦值再把字符順序還原后轉化為整數(shù)
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("整數(shù)分成%d組:\n",lri_group_zs);
/*輸出整數(shù)各分組*/
for(i=1;i<=lri_group_zs;i++)
printf("a1[%d]=%d ",i,lri_a1[i]);
/*輸出小數(shù)*/
if(atoi(lrs_xs)!=0)
printf("小數(shù)為:%s.\n",lrs_xs);
/*循環(huán)處理整數(shù)的分組*/
for(i=1;i<=lri_group_zs;i++)
{
if(lri_a1[i]!=0) //如果該組為0則不執(zhí)行循環(huán)體
{
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) //如果是十幾則打印數(shù)字
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) //如果整數(shù)不為0則打印"圓"
strcat(lrs_total,"圓 ");
/*小數(shù)處理*/
if(atoi(lrs_xs)!=0)
{
memset(lrs_tmp,0,sizeof(lrs_tmp)); //初始化臨時數(shù)組
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) //整數(shù)不為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 + -