输入一个整数(位数不超过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 币值转换相关推荐

  1. c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)

    1.整型常量的的前缀:(1)十进制常数无前缀. (2)八进制常数前缀为0,八进制常数无符号. (3)十六进制常数前缀为0X或0x. 注:在程序中是根据前缀来区分各种进制数的.因此在书写常数时不要把前缀 ...

  2. C语言学习之路--计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围

    目录 一.前言 二.计算机系统组成以及工作原理简介 1.硬件系统基本组成原理及工作原理 2.硬件各部分详解 1.运算器 2.控制器 CPU 3.存储器 1.内存储器 2.外存储器 3.拓展 4.存储器 ...

  3. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  4. 《C语言程序设计》一 2.5 案例学习——华氏温度与摄氏温度的转换

    2.5 案例学习--华氏温度与摄氏温度的转换 [例2-7] 你的一个朋友要去某地旅游,当地天气预报是用华氏温度报告的,请你编写程序,帮助你的朋友进行温度的转换,计算并输出对应的摄氏温度. 1.问题分析 ...

  5. 2019寒假作业二:PTA7-1币值转换

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...

  6. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt

    编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...

  7. R语言学习手记 (1)

    R语言学习手记 (1) 经管的会计和财管都会学数据统计与分析R语言这门课,加上我也有点兴趣,就提前选了这门课,以下的笔记由老师上课的PPT.<R语言编程艺术>和<R语言数据科学> ...

  8. 计算机基础语言学习线路图

    计算机基础语言学习线路图 HTML HTML教程 HTML简介 HTML编辑器 HTML基础 HTML元素 HTML属性 HTML标题 HTML段落 HTML样式 HTML格式化 HTML引用元素 H ...

  9. R语言学习之xts时间序列

    可扩展的时间序列xts R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发 ...

  10. c语言 char转int_C语言关键字及进制的转换你都知道吗?

    ​前面我们讲过 C语言简洁.紧凑 使用方便.灵活 那是什么使得C语言这么方便呢? 那就是关键字,或称保留字 C语言的关键字共有32个 根据关键字的作用 可分为 数据类型关键字 控制语句关键字 存储类型 ...

最新文章

  1. java面试题-精心准备
  2. python获取当前进程id_从python进程名中获取进程id
  3. 微信小程序定时器setInterval()的使用注意事项
  4. 我算是优秀的程序员吗?
  5. 漫画:如何实现大整数相乘?(下)
  6. 大数据之-Hadoop3.x_MapReduce_切片源码分析---大数据之hadoop3.x工作笔记0104
  7. ACdream群赛(4)总结
  8. css line-height多种用法与之间的区别
  9. taskctl控制容器之定时器个人理解
  10. 取消php网站验证码,如何取消网站后台的登陆验证码
  11. 学编程c语言高考能加分吗,编程已列入中高考,孩子升学加分的机会能否抓住?...
  12. RK3288方案开发,RK3288开发板方案,RK3288平板芯片参数资料
  13. 文件被占用删除不了?快来我给你一招解决!
  14. AD生成顶层丝印、底层丝印
  15. R语言的三种聚类方法
  16. 简单使用的MQTT调试软件
  17. 求最大公约数与最小公倍数(C语言)
  18. tp5框架实现推送消息到企业微信机器人(从需求分析、方案设计、研发阐述)
  19. PMP中的那些进度/成本图
  20. IP地址的分类 十进制与二进制的转换

热门文章

  1. server端获得到client端的IP地址的格式
  2. [Unity]为什么Random.Rage取不到上限
  3. 我现在投身于物联网行业,身居北京。
  4. 解剖生理学复习题·VIII血液系统
  5. c++程序判断该关系是否为函数与函数类型_C++高级编程之——函数重载、内联、缺省参数、隐式转换
  6. 平衡增强鱼油 Balance Plus 90 Capliques
  7. android应用开发全程实录-用户界面部分章节-你真的会用最简单的TextView么?
  8. JD薅羊毛青龙面板最新版+JDC登陆+xdd扫码编译部署+互助码设置+脚本依赖=一条龙教程11月更新
  9. springboot+mysql第三方游戏账号交易平台-计算机毕业设计源码80552
  10. mysql第4天之常见函数