描述
考试题目和要点:
1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”
本题含有多组样例输入。
输入描述:
输入一个double数
输出描述:
输出人民币格式
示例1
输入:
151121.15
10012.02
复制
输出:
人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
人民币壹万零拾贰元贰分
#include <stdio.h>
#include <string.h>
char *str[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"};
void compute(unsigned in, int flag)
{
int a, b, c, d;
a = in/1000;
if(a != 0)
{
printf("%s仟", str[a]);
}
in = in%1000;
b = in/100;
if(b != 0)
{
if(a==0 && flag!=0)
{
printf("零");
}
printf("%s佰", str[b]);
}
in = in%100;
c = in/10;
if(c != 0)
{
if((a!=0||flag!=0) && b==0)
{
printf("零");
}
if(c == 1)
{
printf("拾");
}
else
{
printf("%s拾", str[c]);
}
}
d = in%10;
if(d != 0)
{
if((a!=0||b!=0||flag!=0) && c==0)
{
printf("零");
}
printf("%s", str[d]);
}
}
int main(void)
{
double in[32] = {0};
unsigned a;
unsigned tmp;
int x, y, z;
int i, j, k;
char test[16] = {0};
char *p;
j = 0;
while(scanf("%lf", in+j) != EOF)
{
j++;
}
for(i=0; i<j; i++)
{
memset(test, 0, sizeof(test));
snprintf(test, sizeof(test), "%lf", in[i]);
if((p=strchr(test, '.')) == NULL)
{
memset(test, 0, sizeof(test));
k = 0;
}
else
{
k = 0;
k = (*(p+1)-'0')*10+*(p+2)-'0';
}
printf("人民币");
x = 0;
y = 0;
z = 0;
if(in[i] < 1)
{
a = 0;
}
else
{
a = (unsigned )in[i];
}
tmp = a;
x = tmp/100000000;
if(x != 0)
{
compute(x, 0);
printf("亿");
}
tmp = tmp%100000000;
y = tmp/10000;
if(y != 0)
{
compute(y, x);
printf("万");
}
tmp = tmp%10000;
if(tmp != 0)
{
compute(tmp, x+y);
printf("元");
}
if(a == in[i])
{
printf("整");
}
else
{
if(k / 10)
{
printf("%s角", str[k/10]);
}
if(k % 10)
{
printf("%s分", str[k%10]);
}
}
printf("\n");
}
return 0;
}