郑州轻工业大学oj1023C语言答案,郑州轻工业学院(ZZULI) OJ系统第1431题 读数字 解题报告...
试题
试题链接
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题 读数字 解题报告...相关推荐
- 中国石油大学计算机摸底考试试题,2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题...
目录 2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题(一).... 2 2017年中国石油大学(华东)计算机与通信工程学院859数据结构考研仿真模拟题(二).. 13 ...
- 郑州轻工业大学c语言考试题库,2016年郑州轻工业学院计算机与通信工程学院C语言程序设计考研复试题库...
一.选择题 1. 以下C 语言用户标示符中,不合法的是 . 答:D [解析]C 语言中的标识符只能由字母.数字和下画线构成,且第一个字符必须是字母或下画线,同时不能与C 语言中的关键字相同.D 项还有 ...
- zzulioj1017C语言答案,郑州轻工业大学oj题解(c语言)1017,1018 if典型题
根据收集到的数据,1017,1018也是错误率比较高,容易卡住的题目. 在讲题目,之前,有必要先把if这一逻辑判断的条件先给大家理清一下. 首先先看两个或者多个if同用的情况: if (条件1) { ...
- 石油大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); ...
- 万维c语言答案,计算机培训 万维考试系统选择题题库(含参考答案)
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...
- 郑州轻工业大学计算机学院书记,郑州轻工业大学计算机与通信工程学院导师教师师资介绍简介-陈浩然...
郑州轻工业大学计算机与通信工程学院导师教师师资介绍简介-陈浩然本站小编 Free考研考试/2020-11-10 郑州轻工业大学硕士生导师基本情况一览表 姓名 陈浩然 职称 讲师 学科/专业学位类别 计 ...
- C语言003:郑州轻工业大学在线测评题目
郑州轻工业大学在线测评题目 1.打印hello world程序 2.计算两个整数的和 3.计算简单的多项式求值 4.两个整数的四则运算 1.打印hello world程序 #include <s ...
- 郑州轻工业大学ACM(zzuli OJ 54)
zzuli OJ 1054: 猴子吃桃 悟空第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一 ...
- 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...
大学大一c语言程序设计期末考试试卷及答案.doc 计算机科学学院C语言程序设计试卷A第1页(共8页)四川师范大学计算机科学学院20122013学年度第二学期期末考试C语言程序设计试卷试卷A答卷说明1. ...
最新文章
- SQL中获取刚插入记录时对应的自增列的值
- 路由器OSPF协议配置命令一
- 操作系统 真象还原 读书笔记
- 微服务架构和SOA的区别
- 数据结构(十六)多源最短路径
- JVM性能优化之CPU负载过高
- Swift - 邮件发送功能的实现
- cocos2dx 3.x(移动修改精灵坐标MoveTo与MoveBy)
- VisualTreeHelper
- python怎么读-Python中怎么读写文件
- PAT之STL:vector、set、map、stack、queue
- Webview 非http或者https的网络请求拦截
- jdk没有jre的解决方法
- 百度地图自定义图标不显示问题解决方案
- 插上翅膀,看华为云CDN如何带你网上冲浪
- CDA I级学习 - 漏斗模型
- 这些手机隐藏功能你知道吗?
- 第七天 黑马十次方 吐槽列表与详细页、发吐槽与评论功能、问答频道功能、掌握DataURL和阿里云OSS
- Java 并发编程—— Exchanger 应用,java软件开发工程师面试题
- 幽默笑话,哥们误会了,木子家原创