C语言学习:PAT 7-83 币值转换
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
整体思想:
将整数拆分成单个数字,同时转换成字母存入字符数组中,同时将计数单位存入字符数组,
最后倒序打印。
1.先定义需要的变量;
char ch_digit[11] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };char ch_unit1[4] = { 'S','B','Q' };char ch_unit2[3] = { 'W','Y' };
//需要将万位和亿位拎出来,因为他俩比较特别,最多只需要打印一次。char ch_ljl[100];//存储字母。int i, j = 0;int stu = 0, we = 0;
//j:总位数;stu:计数单位位数;we:数字位数。
//分成3类方便存入ch_ljl数组。
2.存入;
while (n) {i = n % 10;ch_ljl[j] = ch_digit[i];n /= 10;if (n == 0) {break;}//当n等于零时,已经无需打印位数。j++;we++;
//每存入一个数字,总位数+1,数字+1.if (we < 4 || (we > 4 && we < 8) || we>8) {ch_ljl[j] = ch_unit1[stu];stu++;j++;}else if (we == 4) {ch_ljl[j] = ch_unit2[0];stu = 0; //万位之后从十为开始重新开始。j++;}else if (we == 8) {ch_ljl[j] = ch_unit2[1];stu = 0;j++;}}
到这里还算顺利,后面才是真正麻烦的,主要有两个问题:
(1).中间零的处理;
(2).末尾零的处理;
其中,中间零还需要考虑当万位上是零的时候;
比如说:120,2030中间无需打印零,120,0230就需要打印零。
这些问题都将在打印的时候解决。
3.1 末尾零;
因为在末尾,所以后面零的都无需打印;
前面提到倒序打印数组,所以只要找到末尾有几个位子不用管就行,包括数字和计数单位。
//调用函数计算不用打印的个数。
int lin(char ch[]) {//句末的零个数。int i = 0;while (ch[i] == 'a') {i += 2;}return (i - 1);
}
3.2.中间零;
有两件要确定的事情;
(1).无论中间有多少个零,只需要打印一个零,直到遇到非零;
那么可以猜测打印这个零的条件,下一位数字不为零;
并且当遇到120,2000这种情况的中间零无需打印,而120,0200才需要打印。
(2).跳过中间零的时候有可能跳过万位。
int mon = 0, cat = 0;if (ch_ljl[0] == 'a') {mon = lin(ch_ljl);}for (i = j; i >= mon; i--) {if (ch_ljl[i] == 'a') {cat = 2;
//变量cat有一种倒计时的意思,
//每遇到中间零的时候,跳过两个循环if (ch_ljl[i - 2] != 'a'&&ch_ljl[i-1]!='W') {
//当下一个数字非零,并且(i-1)项并非万位时,打印一个零
//因为120,2300的情况无需打印零。printf("a");}if ((i-1) == 7) {printf("W");
//在第一个if语句下,已经是跳过了万位,所以需要补上。}}if (cat != 0) {cat--;continue;}printf("%c", ch_ljl[i]);}
4.完整代码如下。
#include <stdio.h>int main(void) {int n;scanf("%d", &n);if (n == 0) {//考虑输入为零的情况printf("a");}else {char ch_digit[11] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };char ch_unit1[4] = { 'S','B','Q' };char ch_unit2[3] = { 'W','Y' };char ch_ljl[100];//存储字母。int i, j = 0;int stu = 0, we = 0;//j:总位数;stu:单位位数;we:数字位数。while (n) {i = n % 10;ch_ljl[j] = ch_digit[i];n /= 10;//当n等于零时,已经无需打印位数。if (n == 0) {break;}j++;we++;if (we < 4 || (we > 4 && we < 8) || we>8) {ch_ljl[j] = ch_unit1[stu];stu++;j++;}else if (we == 4) {ch_ljl[j] = ch_unit2[0];stu = 0;j++;}else if (we == 8) {ch_ljl[j] = ch_unit2[1];stu = 0;j++;}}//输出打印部分int mon = 0, cat = 0;if (ch_ljl[0] == 'a') {mon = lin(ch_ljl);}for (i = j; i >= mon; i--) {//倒序打印,句末的零无需打印if (ch_ljl[i] == 'a') {cat = 2;if (ch_ljl[i - 2] != 'a'&&ch_ljl[i-1]!='W') {printf("a");}if ((i-1) == 7) {printf("W");}}if (cat != 0) {cat--;continue;}printf("%c", ch_ljl[i]);}}printf("\n");return 0;
}int lin(char ch[]) {//句末的零个数。int i = 0;while (ch[i] == 'a') {i += 2;}return (i - 1);
}
C语言学习:PAT 7-83 币值转换相关推荐
- c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)
1.整型常量的的前缀:(1)十进制常数无前缀. (2)八进制常数前缀为0,八进制常数无符号. (3)十六进制常数前缀为0X或0x. 注:在程序中是根据前缀来区分各种进制数的.因此在书写常数时不要把前缀 ...
- C语言学习之路--计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围
目录 一.前言 二.计算机系统组成以及工作原理简介 1.硬件系统基本组成原理及工作原理 2.硬件各部分详解 1.运算器 2.控制器 CPU 3.存储器 1.内存储器 2.外存储器 3.拓展 4.存储器 ...
- c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...
- 《C语言程序设计》一 2.5 案例学习——华氏温度与摄氏温度的转换
2.5 案例学习--华氏温度与摄氏温度的转换 [例2-7] 你的一个朋友要去某地旅游,当地天气预报是用华氏温度报告的,请你编写程序,帮助你的朋友进行温度的转换,计算并输出对应的摄氏温度. 1.问题分析 ...
- 2019寒假作业二:PTA7-1币值转换
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...
- c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...
- R语言学习手记 (1)
R语言学习手记 (1) 经管的会计和财管都会学数据统计与分析R语言这门课,加上我也有点兴趣,就提前选了这门课,以下的笔记由老师上课的PPT.<R语言编程艺术>和<R语言数据科学> ...
- 计算机基础语言学习线路图
计算机基础语言学习线路图 HTML HTML教程 HTML简介 HTML编辑器 HTML基础 HTML元素 HTML属性 HTML标题 HTML段落 HTML样式 HTML格式化 HTML引用元素 H ...
- R语言学习之xts时间序列
可扩展的时间序列xts R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发 ...
- c语言 char转int_C语言关键字及进制的转换你都知道吗?
前面我们讲过 C语言简洁.紧凑 使用方便.灵活 那是什么使得C语言这么方便呢? 那就是关键字,或称保留字 C语言的关键字共有32个 根据关键字的作用 可分为 数据类型关键字 控制语句关键字 存储类型 ...
最新文章
- java面试题-精心准备
- python获取当前进程id_从python进程名中获取进程id
- 微信小程序定时器setInterval()的使用注意事项
- 我算是优秀的程序员吗?
- 漫画:如何实现大整数相乘?(下)
- 大数据之-Hadoop3.x_MapReduce_切片源码分析---大数据之hadoop3.x工作笔记0104
- ACdream群赛(4)总结
- css line-height多种用法与之间的区别
- taskctl控制容器之定时器个人理解
- 取消php网站验证码,如何取消网站后台的登陆验证码
- 学编程c语言高考能加分吗,编程已列入中高考,孩子升学加分的机会能否抓住?...
- RK3288方案开发,RK3288开发板方案,RK3288平板芯片参数资料
- 文件被占用删除不了?快来我给你一招解决!
- AD生成顶层丝印、底层丝印
- R语言的三种聚类方法
- 简单使用的MQTT调试软件
- 求最大公约数与最小公倍数(C语言)
- tp5框架实现推送消息到企业微信机器人(从需求分析、方案设计、研发阐述)
- PMP中的那些进度/成本图
- IP地址的分类 十进制与二进制的转换
热门文章
- server端获得到client端的IP地址的格式
- [Unity]为什么Random.Rage取不到上限
- 我现在投身于物联网行业,身居北京。
- 解剖生理学复习题·VIII血液系统
- c++程序判断该关系是否为函数与函数类型_C++高级编程之——函数重载、内联、缺省参数、隐式转换
- 平衡增强鱼油 Balance Plus 90 Capliques
- android应用开发全程实录-用户界面部分章节-你真的会用最简单的TextView么?
- JD薅羊毛青龙面板最新版+JDC登陆+xdd扫码编译部署+互助码设置+脚本依赖=一条龙教程11月更新
- springboot+mysql第三方游戏账号交易平台-计算机毕业设计源码80552
- mysql第4天之常见函数