HJ95 人民币转换

该博客主要介绍了如何将输入的数字转换为中文大写的人民币格式。内容包括人民币金额数字的书写规范,如中文大写数字的使用,整数部分和小数部分的表示,以及在不同数量级上的表示方法。示例中给出了代码实现,用于将输入的double数值转化为正确的人民币格式输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述
考试题目和要点:

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;
    //1
    a = in/1000;
    if(a != 0)
    {
        printf("%s仟", str[a]);
    }
    //2
    in = in%1000;
    b = in/100;
    if(b != 0)
    {
        if(a==0 && flag!=0)
        {
            printf("零");
        }
        printf("%s佰", str[b]);
    }
    //3
    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]);
        }
    }
    //4
    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("k=%d\n", k);
        }
        printf("人民币");
        x = 0;
        y = 0;
        z = 0;
        if(in[i] < 1)
        {
            a = 0;
        }
        else
        {
            a = (unsigned )in[i];
        }
        tmp = a;
        //1
        x = tmp/100000000;
        if(x != 0)
        {
            compute(x, 0);
            printf("亿");
        }
        //2
        tmp = tmp%100000000;
        y = tmp/10000;
        if(y != 0)
        {
            compute(y, x);
            printf("万");
        }
        //3
        tmp = tmp%10000;
        if(tmp != 0)
        {
            compute(tmp, x+y);
            printf("元");
        }
        //4
        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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值