趣味PAT--循环-19. 币值转换(20)
One visible minute on the stage is attributed to ten years of invisible practice off the stage.
"台上一分钟,台下十年功"
题目链接:循环-19. 币值转换(20)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
解题思路:hash映射,将a-j直接映射到字符数组的0-9号元素,将个位到亿位映射到字符数组的0-8号元素,将输入整数的每一位也映射到一个整型数组中,用作索引。然后从高位到低位顺序扫描输入的每一位,按照每一位转换为“数量+单位”的格式将结果保存在一个字符数组中,具体见下面的代码
注意点:多个连续0的情况,万位的处理,个位的处理,注意下面几个测试用例
①0; ②1; ③200; ④105005000; ⑤100505000; ⑥100055000;
AC代码:
#include <iostream> int main()
{
int a[] = {, , , , , , , , };
int b[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
int c[] = {' ', 'S', 'B', 'Q', 'W', 'S', 'B', 'Q', 'Y'};
int d[] = { };
int n, k = ;
char out[] = { };
//last用来标记上一位是否为0,first用来标记亿位到万位之间是否全为0
int last = , first = ; std::cin >> n;
//用字符数组来保存输入就可以避免使用除法,但是那样可能不太直观
for (int i = ; i >= ; i--)
d[i] = n / a[i] % ; for (int i = ; i >= ; i--)
{
//验证亿位到万位之间是否全为0
if (i <= && i >= && d[i] != ) {
first = ;
} if (d[i] != ) {
out[k++] = b[d[i]];
//个位上没有单位
if (i != )
out[k++] = c[i];
last = d[i];
} else if (last != && i != ) {
//这个位是0但上一个位不是0并且这个位不是万位,如 200 的十位
out[k++] = b[d[i]];
last = d[i];
} else if ((i == ) && first == ) {
//万位为0并且在万位之前亿位之后已经有非0位,如 100505000
if (out[k-] == b[]) {
//十万位或者百万位为0,则去掉该0,如 105005000
out[k-] = c[i];
} else {
//十万位非0,如 100555000
out[k++] = c[i];
}
last = ;
}
} //输入为0
if (n == ) {
out[k++] = b[];
} //如果个位是0,则要清除输出结果中的0,如 200
if (out[k-] == b[] && k != ) {
out[k-] = '\0';
} else {
out[k] = '\0';
} std::cout << out; return ;
}
总结:这道题看似简单,但是其中有一些细节还是挺绕人的,非常考察对细节的处理能力,所以写出来记录一下,以后也会特别注意类似的问题
趣味PAT--循环-19. 币值转换(20)的更多相关文章
- 2019寒假作业二:PTA7-1币值转换
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...
- PTA编程总结2—币值转换
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...
- B1008 数组元素循环右移问题 (20分)
B1008 数组元素循环右移问题 (20分) 思路 1 2 3 4 5 6 5 6 1 2 3 4 6个数,循环右移2位. 也可以理解为 先翻转 6 5 4 3 2 1 然后再两部分,分别翻转 5 6 ...
- PAT乙级:1088 三人行 (20分)
PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...
- PAT乙级:1064 朋友数 (20分)
PAT乙级:1064 朋友数 (20分) 题干 如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号".例如 123 和 ...
- PAT Advanced 1042 Shuffling Machine (20 分)(知识点:利用sstream进行转换int和string)
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- PAT A1015 Reversible Primes (20 分)——进制转换,质数
A reversible prime in any number system is a prime whose "reverse" in that number system i ...
- PAT B1008 数组元素循环右移问题 (20 分)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...
随机推荐
- cf C. Divisible by Seven
http://codeforces.com/contest/376/problem/C 题意:给你一个大数最多含有10^6个数字,这里面必须含有1,6,8,9,然后重新排列找出一个能被6整除的数. 思 ...
- 转:Redis作者谈Redis应用场景
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...
- Extjs4 中在指定光标处插入值
var rulearea = Ext.getCmp(文本域Id); var rulevalue = rulearea.getValue();// 获取文本textarea 里面的值 var start ...
- JavaScript AMD 模块加载器原理与实现
关于前端模块化,玉伯在其博文 前端模块化开发的价值 中有论述,有兴趣的同学可以去阅读一下. 1. 模块加载器 模块加载器目前比较流行的有 Requirejs 和 Seajs.前者遵循 AMD规范,后者 ...
- android sudio 记录
1. KVM is not installed on this machine (/dev/kvm is missing) 原文网址:http://askubuntu.com/questions/56 ...
- 推送消息 相关公司 手机端分享http://mob.com/
信鸽 http://xg.qq.com/xg/pro/ctr_message 云巴 http://yunba.io/usercases/ 极光https://www.jpush.cn/ 手机端分享ht ...
- 开源项目AndroidUtil-采用Fragment实现TabHost
原文出自:方杰|http://fangjie.info/?p=141 转载请注明出处 学习Android也有一段时间了,感觉大部分的Android应用都有很多类似的组件,所以就打算做了这样一个开源项目 ...
- Alert Views
Alert views display a concise and informative alert message to the user. Alert views convey importan ...
- OBJ-C
1.直接赋值 NSString *name = @"Starain"; 2.用已经存在的字符串进行初始化 NSString *name2 = [NSString stringWit ...
- [置顶] 【Git入门之九】解决冲突
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309531 1.多人协作冲突 如果多人同时修改了同一个文件,那会出现什么样 ...