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

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

题目描述:将输入的阿拉伯数字转化为大写汉字输出,备注:输入为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

相关文章

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.