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

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

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

相关文章

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”