人民币转换编程(C语言----数字转中文)

题目:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。

4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”

5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”

样例:

个人思路:

1、使用字符串的方法进行实现,如果使用数字计算,可能会导致较大的计算量,切逻辑较为混乱。

2、将人民币通过字符串的形式输入,将整数部分和小数部分分开存储,并获取到他们各自的长度。

3、首先将零 壹 贰 叁 肆 伍 陆等中文字体按他们的顺序存入到字符数组中,如壹在数组中的下标就是1.更方便打印输出

4、对于人民币的读法,我们是从左向右读,但其实,我们需要先从末尾数单位,如123456从6开始数,个十百千万十万,所以他被读作 -》拾贰万叁仟肆佰伍拾陆元整。如下图可以知道,每四个单位就是一个组,什么意思呢,后四位的单位是元、拾、佰、仟,如果再有四位,就是万、拾、佰、仟,再有四位就是亿、拾、佰、仟,所以单位存储到字符中我们分为三组,如上所说的四组。

5、那么我们如何判断是第几组呢,是什么单位呢,很简单,我们需要将他倒序存储,当前遍历到的下标+1除以4就是第几组,也就是元、还是万、还是亿,下标+1取余4就是什么单位了,如下图

6、这是主要思路,一些比较细枝末节的输出要求如没有小数部分输出整,如对于壹拾不输出壹直接输出拾等等不再赘述

7、对于小数部分就比较简单了,直接判断有无小数部分,按照上面的方法输出对应的中文字体和单位即可

8、自测输入

#include <stdio.h>
#include <string.h>

char char_money[11][10] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"};


char char_unit_0[4][10] = {"元", "拾", "佰", "仟"};
char char_unit_1[4][10] = {"万", "拾", "佰", "仟"};
char char_unit_2[4][10] = {"亿", "拾", "佰", "仟"};


char char_unit_3[2][10] = {"角", "分"};

int main() {
    char money[20];
    char money_FanInt[20];
    char money_Float[5];
    char printf_money[50][10];
    scanf("%s", money);
    char ch;
    int length = strlen(money);
    int length_int = 0;
    int length_float = 0;
    int q = 0;
    int shang = 4;
    int yu = 0;
    for (int i = 0; i < length; i++) {       // 获取整数的长度和小数的长度
        if (q == 0 && (money[i] != '.')) {
            length_int++;
        } else if (money[i] == '.') {
            q++;
        } else if (q == 1) {
            length_float++;
        }
    }
    q = 0;
    for (int i = length_int - 1; i >= 0; i--) {  // 得到整数部分倒序字符串
        money_FanInt[q] = money[i];

        q++;
    } 
    if (length_float > 0) {                      // 得到小数部分字符串
        q = 0;
        for (int i = length_int + 1; i < length; i++) {
            money_Float[q] = money[i];

            q++;
        }

    }

    printf("人民币");

    if (length_int == 1 && money_FanInt[0] == '0') {     // 特殊情况如0.38,不输出整数部分

    } else {
        for (int i = length_int - 1; i >= 0; i--) {
            shang = (i + 1) / 4;
            yu = (i + 1) % 4;
            if (yu == 0) {
                yu = 4;
            }
            int index = money_FanInt[i] - '0';
            if (index == 1 && yu == 2);        // 样例中1010要求输出壹仟零拾元整,不是壹仟零壹拾元整,所以特殊情况单独判断
            else if(index == 0 && i == 0)      // 当个位数是0,如310,叁佰壹拾元
            {
                printf("元");
            }     
            else {
                printf("%s", char_money[index]);
            }

            if (index == 0)
            {}

            else {
                if (shang == 0) {
                    printf("%s", char_unit_0[yu - 1]);
                } else if (shang == 1) {
                    printf("%s", char_unit_1[yu - 1]);
                } else if (shang == 2) {
                    printf("%s", char_unit_2[yu - 1]);
                }
            }

        }
    }

    if(length_float == 0 || (length_float == 1&& money_Float[0] == '0') || (length_float == 2 && money_Float[0] == '0' && money_Float[1] == '0'))
    {
        printf("整");
    }
    else if (length_float == 1) {
        int index = money_Float[0] - '0';

        printf("%s%s", char_money[index], char_unit_3[0]);
    } else if (length_float == 2) {
        int index = money_Float[0] - '0';
        if (index == 0) {
            
        } else {
            {
                printf("%s%s", char_money[index], char_unit_3[0]);
            }
        }
        index = money_Float[1] - '0';
        if(index == 0)
        {

        }
        else {
            printf("%s%s", char_money[index], char_unit_3[1]);
        }
        
    }


    return 0;
}

### LlamaIndex 多模态 RAG 实现 LlamaIndex 支持多种数据类型的接入与处理,这使得它成为构建多模态检索增强生成(RAG)系统的理想选择[^1]。为了实现这一目标,LlamaIndex 结合了不同种类的数据连接器、索引机制以及强大的查询引擎。 #### 数据连接器支持多样化输入源 对于多模态数据的支持始于数据收集阶段。LlamaIndex 的数据连接器可以从多个异构资源中提取信息,包括但不限于APIs、PDF文档、SQL数据库等。这意味着无论是文本还是多媒体文件中的内容都可以被纳入到后续的分析流程之中。 #### 统一化的中间表示形式 一旦获取到了原始资料之后,下一步就是创建统一而高效的内部表达方式——即所谓的“中间表示”。这种转换不仅简化了下游任务的操作难度,同时也提高了整个系统的性能表现。尤其当面对复杂场景下的混合型数据集时,良好的设计尤为关键。 #### 查询引擎助力跨媒体理解能力 借助于内置的强大搜索引擎组件,用户可以通过自然语言提问的形式轻松获得所需答案;而对于更复杂的交互需求,则提供了专门定制版聊天机器人服务作为补充选项之一。更重要的是,在这里实现了真正的语义级关联匹配逻辑,从而让计算机具备了一定程度上的‘认知’功能去理解和回应人类意图背后所蕴含的意义所在。 #### 应用实例展示 考虑到实际应用场景的需求多样性,下面给出一段Python代码示例来说明如何利用LlamaIndex搭建一个多模态RAG系统: ```python from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader, LLMPredictor, PromptHelper, ServiceContext from langchain.llms.base import BaseLLM import os def create_multi_modal_rag_system(): documents = SimpleDirectoryReader(input_dir='./data').load_data() llm_predictor = LLMPredictor(llm=BaseLLM()) # 假设已经定义好了具体的大型预训练模型 service_context = ServiceContext.from_defaults( chunk_size_limit=None, prompt_helper=PromptHelper(max_input_size=-1), llm_predictor=llm_predictor ) index = GPTSimpleVectorIndex(documents, service_context=service_context) query_engine = index.as_query_engine(similarity_top_k=2) response = query_engine.query("请描述一下图片里的人物表情特征") print(response) ``` 此段脚本展示了从加载本地目录下各类格式文件开始直到最终完成一次基于相似度排序后的top-k条目返回全过程。值得注意的是,“query”方法接收字符串参数代表使用者想要询问的内容,而在后台则会自动调用相应的解析模块并结合先前准备好的知识库来进行推理计算得出结论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值