试题

试题链接

Description

以前比赛的时候大家最喜闻乐见的题目大概就是A+B了,但是现在的A+B一个比一个麻烦,基本上不带点儿进制转换数值处理什么的都不好意思说自己是A+B。A+B早已经不是简单的代名词了!

今天,我们决定用一道新的题目来重新定义一下水题该有的样子,这道题目一定要比A+B更简单、更直白,让人看到之后不用计算随口就能把答案说出来!

这道题就是读数字!是的!你没看错!不是小明读数字!不是大明读数字!!更不是人见人爱读数字和火星读数字!

读入一个整数,然后请用汉语将它表示出来。比如对于10,请输出“十”(不含双引号),对于1234,输出“一千二百三十四”。

是不是很简单?是不是看到数据就不自觉地把答案念出来了?那还犹豫什么?赶紧A掉它吧!

Input

多组测试数据。每组测试数据包含一个整数n(0≤n<109)。

Output

一串汉字

Sample Input

15

110100000

1010

Sample Output

十五

一亿一千零一十万

一千零一十

试题大意

多组数据,每组数据输入一个小于 109 的正整数或0(阿拉伯数字,十进制),输出这个数字的中文名。例如输入12096,输出“一万二千零九十六”。

复习小学数学

从右往左,每四位分一级,分别叫做“个级”、“万级”和“亿级”。

含有个级、万级和亿级的数,必须先读亿级,再读万级,最后读个级。

亿级和万级的数都按个级的读数方法来读,在后面加上“亿”或“万”字。

在级末尾的“0”不读,在级中间的“0”必须读。中间不管连续有几个“0”,都只读一个“零”。

例如:

20020056789

第一步:分级

从右往左,每四位分一级。

200¦2005¦6789

第二步,每一级,都按个级来读数

亿级:二百

万级:二千零五

个级:六千七百八十九

第三步,亿级后加“亿”字,万级后加“万”字

二百亿二千零五万六千七百八十九

解题思路

直接模拟人工读数,先分级转汉字,每级后加“亿”或“万”字。每一级内,都按“几千几百几十几”的规则,有一个或多个“0”的,如果不在末尾,就读一个“零”。

最后要注意的是:10至19如果出现在最高的数级,则读成“十”至“十九”,不要读成“一十”至“一十九”。但是出现在后面,则要读成“一十”至“一十九”。例如“190013”读做“十九万零一十三”。

源代码

/**

* @file read_number.c

* @author yjf_victor

* @date 2015-06-09

* @brief http://acm.zzuli.edu.cn/problem.php?id=1431

*/

#include

#include

#include

#define MAX_LENGTH 100

#define MYLLION "亿"

#define MYRIAD "万"

#define THOUSAND "千"

#define HUNDRED "百"

#define TEN "十"

#define ONE_BEFORE_TEN "一十"

const char *digit_chinese_name[] =

{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};

enum need_zero_prefix {ERROR, NO_ZERO_PRIFIX, NEED_ZERO_PREFIX};

/**

* @brief 单一数级中的数字的中文读法

* @param[out] chinese_name 中文读法

* @param[in] arabic_number 阿拉伯数字

* @return 可能需要补前导“零”,则返回NEED_ZERO_PREFIX,

* 否则返回NO_ZERO_PRIFIX,出错返回ERROR

*/

enum need_zero_prefix arabic_to_chinese_below_a_myriad(

char *chinese_name, const char *arabic_number)

{

int value;

char four_digit_number[5];

if (chinese_name == NULL || arabic_number == NULL)

return ERROR;

sscanf(arabic_number, "%04d", &value);

sprintf(four_digit_number, "%04d", value);

chinese_name[0] = '\0';

if (four_digit_number[0] == '0')

{

if (four_digit_number[1] == '0')

{

if (four_digit_number[2] == '0')

{

if (four_digit_number[3] != '0')

{

// 一位数

strcat(chinese_name,

digit_chinese_name[four_digit_number[3] - '0']);

}

}

else // 两位数

{

// 读十位

strcat(chinese_name,

digit_chinese_name[four_digit_number[2] - '0']);

strcat(chinese_name, TEN);

// 读个位

if (four_digit_number[3] != '0')

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[3] - '0']);

}

}

}

else // 三位数

{

// 读百位

strcat(chinese_name,

digit_chinese_name[four_digit_number[1] - '0']);

strcat(chinese_name, HUNDRED);

// 读十位

if (four_digit_number[2] == '0')

{

if (four_digit_number[3] != '0')

strcat(chinese_name, digit_chinese_name[0]);

}

else

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[2] - '0']);

strcat(chinese_name, TEN);

}

// 读个位

if (four_digit_number[3] != '0')

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[3] - '0']);

}

}

return NEED_ZERO_PREFIX;

}

else // 四位数

{

// 读千位

strcat(chinese_name,

digit_chinese_name[four_digit_number[0] - '0']);

strcat(chinese_name, THOUSAND);

// 读百位

if (four_digit_number[1] == '0')

{

if (four_digit_number[2] != '0')

strcat(chinese_name, digit_chinese_name[0]);

}

else

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[1] - '0']);

strcat(chinese_name, HUNDRED);

}

// 读十位

if (four_digit_number[2] == '0')

{

if (four_digit_number[3] != '0')

strcat(chinese_name, digit_chinese_name[0]);

}

else

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[2] - '0']);

strcat(chinese_name, TEN);

}

// 读个位

if (four_digit_number[3] != '0')

{

strcat(chinese_name,

digit_chinese_name[four_digit_number[3] - '0']);

}

return NO_ZERO_PRIFIX;

}

}

/**

* @brief 分级读数

* @details 分成“亿级”、“万级”和“个级”,读数后加上“亿”或“万”字

* @param[out] chinese_name 中文读法

* @param[in] value 需要被读的数值

* @return 成功返回0,失败返回-1

*/

int value_to_chinese(char *chinese_name, int value)

{

char temp_chinese_name[MAX_LENGTH];

char arabic_number[MAX_LENGTH];

int flag = 0;

int ret;

if (chinese_name == NULL)

return -1;

sprintf(arabic_number, "%012d", value);

chinese_name[0] = '\0';

// 亿级

arabic_to_chinese_below_a_myriad(

temp_chinese_name, arabic_number);

if (strlen(temp_chinese_name) > 0)

{

flag = 1;

strcat(chinese_name, temp_chinese_name);

strcat(chinese_name, MYLLION);

}

// 万级

ret = arabic_to_chinese_below_a_myriad(

temp_chinese_name, arabic_number+4);

if (strlen(temp_chinese_name) > 0)

{

if (flag == 1 && ret == NEED_ZERO_PREFIX)

strcat(chinese_name, digit_chinese_name[0]);

flag = 1;

strcat(chinese_name, temp_chinese_name);

strcat(chinese_name, MYRIAD);

}

// 个级

ret = arabic_to_chinese_below_a_myriad(

temp_chinese_name, arabic_number+8);

if (strlen(temp_chinese_name) > 0)

{

if (flag == 1 && ret == NEED_ZERO_PREFIX)

strcat(chinese_name, digit_chinese_name[0]);

strcat(chinese_name, temp_chinese_name);

}

// “一十”开头的,去掉“一”字

if (!strncmp(chinese_name, ONE_BEFORE_TEN, strlen(ONE_BEFORE_TEN)))

{

memmove(chinese_name, chinese_name+strlen(digit_chinese_name[1]),

strlen(chinese_name+1));

}

// 如果输入是“0”的话,输出“零”

if (strlen(chinese_name) == 0)

strcat(chinese_name, digit_chinese_name[0]);

return 0;

}

/**

* @brief 主函数

* @return 成功返回EXIT_SUCCESS

*/

int main(void)

{

int value;

char chinese_name[MAX_LENGTH];

while (scanf("%d", &value) != EOF)

{

value_to_chinese(chinese_name, value);

puts(chinese_name);

}

return EXIT_SUCCESS;

}

郑州轻工业大学oj1023C语言答案,郑州轻工业学院(ZZULI) OJ系统第1431题 读数字 解题报告...相关推荐

  1. 中国石油大学计算机摸底考试试题,2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题...

    目录 2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题(一).... 2 2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题(二).. 13 ...

  2. 郑州轻工业大学c语言考试题库,2016年郑州轻工业学院计算机与通信工程学院C语言程序设计考研复试题库...

    一.选择题 1. 以下C 语言用户标示符中,不合法的是 . 答:D [解析]C 语言中的标识符只能由字母.数字和下画线构成,且第一个字符必须是字母或下画线,同时不能与C 语言中的关键字相同.D 项还有 ...

  3. zzulioj1017C语言答案,郑州轻工业大学oj题解(c语言)1017,1018 if典型题

    根据收集到的数据,1017,1018也是错误率比较高,容易卡住的题目. 在讲题目,之前,有必要先把if这一逻辑判断的条件先给大家理清一下. 首先先看两个或者多个if同用的情况: if (条件1) { ...

  4. 石油大c语言答案,中国石油大学C语言答案

    int main() { char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; fun(w,a); ...

  5. 万维c语言答案,计算机培训 万维考试系统选择题题库(含参考答案)

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...

  6. 郑州轻工业大学计算机学院书记,郑州轻工业大学计算机与通信工程学院导师教师师资介绍简介-陈浩然...

    郑州轻工业大学计算机与通信工程学院导师教师师资介绍简介-陈浩然本站小编 Free考研考试/2020-11-10 郑州轻工业大学硕士生导师基本情况一览表 姓名 陈浩然 职称 讲师 学科/专业学位类别 计 ...

  7. C语言003:郑州轻工业大学在线测评题目

    郑州轻工业大学在线测评题目 1.打印hello world程序 2.计算两个整数的和 3.计算简单的多项式求值 4.两个整数的四则运算 1.打印hello world程序 #include <s ...

  8. 郑州轻工业大学ACM(zzuli OJ 54)

    zzuli OJ 1054: 猴子吃桃 悟空第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一 ...

  9. 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...

    大学大一c语言程序设计期末考试试卷及答案.doc 计算机科学学院C语言程序设计试卷A第1页(共8页)四川师范大学计算机科学学院20122013学年度第二学期期末考试C语言程序设计试卷试卷A答卷说明1. ...

最新文章

  1. SQL中获取刚插入记录时对应的自增列的值
  2. 路由器OSPF协议配置命令一
  3. 操作系统 真象还原 读书笔记
  4. 微服务架构和SOA的区别
  5. 数据结构(十六)多源最短路径
  6. JVM性能优化之CPU负载过高
  7. Swift - 邮件发送功能的实现
  8. cocos2dx 3.x(移动修改精灵坐标MoveTo与MoveBy)
  9. VisualTreeHelper
  10. python怎么读-Python中怎么读写文件
  11. PAT之STL:vector、set、map、stack、queue
  12. Webview 非http或者https的网络请求拦截
  13. jdk没有jre的解决方法
  14. 百度地图自定义图标不显示问题解决方案
  15. 插上翅膀,看华为云CDN如何带你网上冲浪
  16. CDA I级学习 - 漏斗模型
  17. 这些手机隐藏功能你知道吗?
  18. 第七天 黑马十次方 吐槽列表与详细页、发吐槽与评论功能、问答频道功能、掌握DataURL和阿里云OSS
  19. Java 并发编程—— Exchanger 应用,java软件开发工程师面试题
  20. 幽默笑话,哥们误会了,木子家原创

热门文章

  1. 什么是AudioEffect
  2. AudioEffect与Equalizer解析(Java侧)
  3. 【backtrader保姆级教学】日内区间突破型策略
  4. 【信号】用matlab实现一维信号的高斯滤波
  5. DUN连接完成后,pc与手机进行LCP协商
  6. 华为云cce 部署nacos集群docker
  7. 黄金价格走势k线图如何看?
  8. Py之utils:Python库之utils的简介、安装、使用方法之详细攻略
  9. 中国大学mooc医学计算机与信息素养答案,医学计算机与信息素养
  10. 嵌入式系统考试复习大全