BOJ 469. 暑假作业题
来源:互联网 发布:小米摄像头app软件 编辑:程序博客网 时间:2024/05/17 21:54
题意:给出一个数,输出中文读法
思路:巨坑的模拟题。我的方法是分治法。因为最后处理的其实是万以内的数。所以,我们先判断是否大于亿,在判断是否大于万,最后只对万以内的数处理。
其中有一个问题是:是否有多余的0需要读。
处理方法是这样的:1.对于千位的处理:传入一个标识变量,表示千以前是否有数。如果有数且千位为0且整个千位数不为0,那就必须要多读一个0.
2.对于其他位的处理:首先要读出一个不是0的数,如果此数后一位为0且后面还有不为0的数,那接下来就要多读一个0;
其他细节请看代码。
坑:只有0需要读0
代码如下:
#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <iostream>#include <map>#include <queue>#include <stack> using namespace std; const long long E = 100000000LL;const long long W = 10000LL;char c[4] = {0,'S','B','Q'}; void solve(long long num,bool signal){ if(num / E > 0){ solve(num / E,false); putchar('E'); solve(num % E,true); } else if(num / W > 0){ solve(num / W,signal); putchar('W'); solve(num % W,true); } else{ int a[4]={0}; int cnt = 0; for(int i = 0 ; num;++i, num/=10){ a[i] = num % 10; if(a[i] != 0) cnt++; } if(cnt != 0 && a[3] == 0 && signal) putchar('0'); for(int i = 3; i > 0; i--){ if(a[i] != 0){ putchar(a[i] + '0'),putchar(c[i]),cnt--; if(cnt != 0 && a[i-1]==0) putchar('0'); } } if(a[0] != 0) putchar(a[0] + '0'); }} int main(void){ //freopen("input.txt","r",stdin); int n; scanf("%d", &n); while(n--){ long long num; scanf("%lld", &num); if(num==0) puts("0"); else{ solve(num,false); puts(""); } } return 0;}
0 0
- BOJ 469. 暑假作业题
- boj 469. 暑假作业题-数字的读法
- 2014新生暑假个人排位赛07 A.暑假作业题
- 作业题
- 作业题
- 作业题
- 作业题
- BOJ 2014新生暑假个人排位赛03 整合
- BOJ 2014新生暑假个人排位赛04 整合
- BOJ 2014新生暑假个人排位赛05 整合
- BOJ 2014新生暑假个人排位赛06 整合
- BOJ 2014新生暑假个人排位赛07 整合
- BOJ 2014新生暑假个人排位赛08 整合
- BOJ 2014新生暑假个人排位赛09 整合
- BOJ 2014新生暑假个人排位赛11 整合
- 反射-作业题
- VB作业题
- nyoj201 作业题
- The history of Graph Store(matrix, adjacency list, and orthogonal list)
- hdu 4419
- 开源爬虫软件汇总
- git-cola的安装(SIP + QT4 + PyQt)
- java实现局域网内多人群聊
- BOJ 469. 暑假作业题
- 设计一个Cache系统 【双向链表+哈希表】
- Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest
- POJ 1159 Palindrome 题解
- Eclipse快捷键大全
- 菜鸟学汇编001 计算机硬件基础
- 3.1-一个数组模拟三个栈
- socket相关知识总结
- something wrong