考试题目和要点:
1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分)
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分)
3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(
输入描述:
输入一个double数
输出描述:
输出人民币格式
示例1
输入
151121.15
输出
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
如下是我写的代码:
#include
#include
typedef struct{
char temp[10];
}monkey_struct;
//单位和数组下标的对应关系
monkey_struct IToY(int number){
monkey_struct Yuan={"null"};
if(number < 0){
return Yuan;
}
if((number%2) == 0){
//十,千的判断
if((number % 4) == 0){
strcpy(Yuan.temp,"仟");
}else{
strcpy(Yuan.temp,"拾");
}
}else{
if((number >= 3) && (((number -3)%4) == 0)){
strcpy(Yuan.temp,"佰");
}else{
//判断是万还是亿
if((number == 5) || ((number >= 13) && (((number - 5) % 8) == 0) )){
strcpy(Yuan.temp,"万");
}
else{
if (number >= 9){
strcpy(Yuan.temp,"亿");
}
}
}
}
return Yuan;
}
//数字和大写金币之间的对应关系
monkey_struct NumToMonkey(char number){
monkey_struct monkey={"null"};
switch(number)
{
case '0':
strcpy(monkey.temp,"零");
break;
case '1':
strcpy(monkey.temp,"壹");
break;
case '2':
strcpy(monkey.temp,"贰");
break;
case '3':
strcpy(monkey.temp,"叁");
break;
case '4':
strcpy(monkey.temp,"肆");
break;
case '5':
strcpy(monkey.temp,"伍");
break;
case '6':
strcpy(monkey.temp,"陆");
break;
case '7':
strcpy(monkey.temp,"柒");
break;
case '8':
strcpy(monkey.temp,"捌");
break;
case '9':
strcpy(monkey.temp,"玖");
break;
default:
break;
}
return monkey;
}
int main(){
double a;
char input_result[256] = {};
char output_result[256];
char temp[256]= {};
char *p = input_result;
int i,len,count = 0;
monkey_struct yuan,monkey;
while(scanf("%lf",&a) != EOF){
//处理整数部分代码 begin
sprintf(output_result,"%0.2lf",a);
len = strlen(output_result);
//判断小数后面是否全部是0
for(int j =len -2 ;j < len;j++){
if (output_result[j] == '0')
{
count ++;
}
}
//对应字符串转阿拉伯人民币
if(len > 1)
{
for(int i = 0; i < len -3; i++)
{
yuan = IToY(len -i - 3);
if (i == 0 )
{
monkey =NumToMonkey(output_result[0]);
if ((output_result[0] != '0') && (strcmp(monkey.temp,"null"))){
strcat(input_result,monkey.temp);
if (strcmp(yuan.temp,"null")){
strcat(input_result,yuan.temp);
}
}
}else{
monkey =NumToMonkey(output_result[i]);
if (strcmp(monkey.temp, "null")){
strcat(input_result,monkey.temp);
if(strcmp(yuan.temp, "null")){
strcat(input_result,yuan.temp);
}
}
}
}
}
if (count == 2){
strcat(input_result,"整");
printf("人民币%s\n",input_result);
}else
{ //printf("人民币%s\n",output_result);
monkey =NumToMonkey(output_result[len-1]);
if(output_result[len-1] != '0'){
strcat(input_result,NumToMonkey(output_result[len-2]).temp);
strcat(input_result,"角");
strcat(input_result,monkey.temp);
strcat(input_result,"分");
printf("人民币%s\n",input_result);
}else{
strcat(input_result,NumToMonkey(output_result[len-2]).temp);
strcat(input_result,"角");
printf("人民币%s\n",input_result);
}
}
}
return 0;
}