#include <stdio.h>
/* 获取阿拉伯数字对应的中文数字 */
int get_value(int data, char* value)
{
switch(data)
{
case 0:
memcpy(value, "零", strlen("零"));
break;
case 1:
memcpy(value, "壹", strlen("壹"));
break;
case 2:
memcpy(value, "贰", strlen("贰"));
break;
case 3:
memcpy(value, "叁", strlen("叁"));
break;
case 4:
memcpy(value, "肆", strlen("肆"));
break;
case 5:
memcpy(value, "伍", strlen("伍"));
break;
case 6:
memcpy(value, "陆", strlen("陆"));
break;
case 7:
memcpy(value, "柒", strlen("柒"));
break;
case 8:
memcpy(value, "捌", strlen("捌"));
break;
case 9:
memcpy(value, "玖", strlen("玖"));
break;
}
return 0;
}
/* 获取每一位的单位 0 : 分 1:角 ... >6(万位以上) 和6-4相同*/
int get_unit(int index, char* unit)
{
if(index > 6)
{
index = index - 4;
}
switch(index)
{
case 0:
memcpy(unit, "分", strlen("分"));
break;
case 1:
memcpy(unit, "角", strlen("角"));
break;
case 2:
memcpy(unit, "元", strlen("元"));
break;
case 3:
memcpy(unit, "拾", strlen("拾"));
break;
case 4:
memcpy(unit, "佰", strlen("佰"));
break;
case 5:
memcpy(unit, "仟", strlen("仟"));
break;
case 6:
memcpy(unit, "万", strlen("万"));
break;
}
return 0;
}
int main()
{
double money;
char result_money[100][4] = {0};
int index = 0;
int i = 0;
if(scanf("%lf", &money) != EOF)
{
/* 将小数点后的角,分,与前面的结合为一个整数
多乘一位,再除一位,防止 0.29 * 100 变为 28
*/
long int cn_money = (long int)(money * 1000);
cn_money /= 10;
//循环获取每一位的中文数字和对应单位 */
while(cn_money)
{
get_unit(i, result_money[index++]);
get_value(cn_money % 10, result_money[index++]);
cn_money /= 10;
i++;
}
int flag = 0;
printf("人民币");
for(int i = index - 1; i >= 0; i--)
{
/* 零角或零分时,应该不输出 */
if((i == 1 && !strcmp(result_money[1], "零"))
|| (i == 3) && !strcmp(result_money[3], "零"))
{
i--;
continue;
}
if(i-2 >= 0)
{
if(!strcmp(result_money[i], "零"))
{
//遇到零时,置标志位
flag = 1;
if(!strcmp(result_money[i-2], "零"))
{ // 1001 情况,跳过一位数
i--;
continue;
}
else if(!strcmp(result_money[i-2], "壹") && !strcmp(result_money[i-3], "拾"))
{ // 1010 情况,输出一个零
printf("零");
i--;
continue;
}
}
}
/* 壹拾 仅输出拾 */
if(i >= 0 && !strcmp(result_money[i], "壹") && !strcmp(result_money[i-1], "拾"))
{
printf("");
}
else
{
//不为零时,清空标志位
flag = 0;
printf("%s", result_money[i]);
}
}
/* 标志位有效,输出 */
if(flag)
{
printf("元整");
}
}
return 0;
}