将输入的阿拉伯数字转化为大写汉字输出【大疆秋招编程题】

本文主要是介绍将输入的阿拉伯数字转化为大写汉字输出【大疆秋招编程题】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:将输入的阿拉伯数字转化为大写汉字输出,备注:输入为9位数以下,高出报错。

例如:输入234—输出为贰佰叁拾肆,输入123456789—输出为壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖。

是上个月大疆笔试的测开编程题,后来复盘时发现网上没有很好的C语言版本,于是把我的答案贴出来做个记录。

编译环境:C

解题思路:因为时间比较紧,所以就是建立如下的查询字典,找对应的数据然后提取并输出:

    char a[10][4] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
    char b[6][4] = { "整","拾","佰","仟","万","亿" };

(由于汉字是占2个字符,属于const char[3]类型的数据,选用char a[10][4]这样的二维数组进行定义)

首先是提取出输入数据的位数与每一位的数字

    while (n != 0){r[i] = n % 10;  //r[]中存放每一位的数据i++;n /= 10; count++;    //count为输入数据的位数}

接下来的数字就按顺序调用就行,关于位数的调用分为以下四种情况:

①5位数以下:则顺序调用("整","拾","佰","仟","万");

②5-8位数之间:对于6-8位数要先调用("拾","佰","仟");

③9位数:要先调用("亿");

④9位数以上:输出报错;

对于第一种情况:

for (i = count - 1; i >= 0; i--)
{printf("%s%s", a[r[i]], b[i]);  //因为第3位数对应的存在r[2]中,因此i=count - 1count--;
}

此处当时在做的时候有个小问题,由于数据比位数的数组要滞后以为,例如r[2]对应的第三位数后应该接b[2],但实际上b[2]是“仟”了,因此当时在b[0]处增加了“整”,好让两个数组同步。如果单纯的b[i-1],会访问无效数据地址,当时这里卡了一下,为了赶时间所以就用暴力加字了。。。

对于第二种情况:

for (i = count - 5; i > 0; i--)
{printf("%s%s", a[r[i+4]], b[i]);//与上述原因相同,第6位数存在r[5]中,因此a[r[i+4]];count--;
}

对于第三种情况:

就比较简单了,只限制了亿位(其实再高也就是上述两种情况的重复),因此对于第9位设置为:

if (count == 9)
{printf("%s%s", a[r[count-1]], b[count-4]);count--;
}

完整的代码为:

#include <stdio.h>int main()
{int count = 0; //count是数字位数int i = 0;int r[10] = {0};//默认是十位数int n;char a[10][4] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };char b[6][4] = { "整","拾","佰","仟","万","亿" };printf("请输入金额:");scanf_s("%d", &n);while (n != 0){r[i] = n % 10;i++;n /= 10; count++;}printf("数组中的内容: \n");while (count >= 0){if (count > 9){printf("输入错误,请重新输入");break;}if (count == 9){printf("%s%s", a[r[count-1]], b[count-4]);count--;}else if (count >= 6 && count <= 8){for (i = count - 5; i > 0; i--){printf("%s%s", a[r[i+4]], b[i]);count--;}}else if (count <= 5 && count >= 0){for (i = count - 1; i >= 0; i--){printf("%s%s", a[r[i]], b[i]);count--;}}}return 0;
}

存在的问题就是字典中的“整”字,把程序贴出来就是做个记录以防终面要复盘逻辑,等周末面完大疆三面了再来修改吧。

仅供参考。

这篇关于将输入的阿拉伯数字转化为大写汉字输出【大疆秋招编程题】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578760

相关文章

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

如何将二进制文件流转化为MockMultipartFile文件

《如何将二进制文件流转化为MockMultipartFile文件》文章主要介绍了如何使用Spring框架中的MockMultipartFile类来模拟文件上传,并处理上传逻辑,包括获取二进制文件流、创... 目录一、名词解释及业务解释1.具体业务流程2.转换对象解释1. MockMultipartFile2

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言