考试题目和要点:
- 中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分)
- 中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分)
- 阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(40分)
输入描述:
输入一个double数
输出描述:
输出人民币格式
示例1
输入
151121.15
输出
人民币壹拾伍万壹仟壹佰贰拾壹元壹角伍分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char number[]="零壹贰叁肆伍陆柒捌玖拾佰仟万亿整分角元";
int seq[200];
char str[200];
char spp[200];
double num;
int intNum;
int dbNum;
while(scanf("%lf",&num)!=EOF)
{
intNum=(int)num;
num-=intNum;
num*=100;
dbNum=(int)(num+0.5);
int len=0;
while(intNum>0)
{
str[len++]=intNum%10+'0';
intNum/=10;
}
str[len]='\0';
int p=0;
int flag=1;
for(int i=len-1; i>=0; i--)
{
if(i%4==3)flag=1;
if(str[i]=='0')
{
flag=0;
if(i==8)seq[p++]=14;
if(i==4)seq[p++]=13;
if(i==0)seq[p++]=18;
continue;
}
if(str[i]!='0'&&flag==0)
{
seq[p++]=0;
flag=1;
}
seq[p++]=str[i]-'0';
if(i%4>0)seq[p++]=i%4+9;
if(i==8)seq[p++]=14;
if(i==4)seq[p++]=13;
if(i==0)seq[p++]=18;
}
if(dbNum==0)
seq[p++]=15;
else if(dbNum<10)
{
seq[p++]=dbNum;
seq[p++]=16;
}
else if(dbNum==10)
{
seq[p++]=dbNum/10;
seq[p++]=17;
}
else
{
seq[p++]=dbNum/10;
seq[p++]=17;
seq[p++]=dbNum%10;
seq[p++]=16;
}
int l=0;
for(int i=0; i<p; i++)
{
spp[l++]=number[seq[i]*2];
spp[l++]=number[seq[i]*2+1];
}
spp[l]='\0';
printf("人民币%s\n",spp);
}
return 0;
}