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

阅读: 评论:0

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

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

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

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

仅供参考。

本文发布于:2024-01-30 21:18:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170662070222908.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23