码迷,mamicode.com
首页 > 其他好文 > 详细

[Swust OJ 552]--拼音教学(找规律)

时间:2015-06-17 00:18:16      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

 

题目链接:http://acm.swust.edu.cn/problem/0552/

 

Time limit(ms): 1000      Memory limit(kb): 65535
 
Description

数钱啦~~~输入一个数字,小于999999999999,我们需要把他们转换为拼音,我们规定例如1234000567的念为“1十2亿3千4百万零5百6十7”具体见输入输出

 
Input

一个数字N

 
Output

数字加拼音,见SAMPLE OUTPUT

 

Sample Input

 
999999999999
123456000
1234000567

Sample Output
9qian9bai9shi9yi9qian9bai9shi9wan9qian9bai9shi9
1yi2qian3bai4shi5wan6qian
1shi2yi3qian4baiwanling5bai6shi7

 
scpc——しιしιπ   
 
 
解题思路:今晚上全是做的这一类题(大脑已经完全混乱了),就是把数字以字符串的形式输入,然后倒序,与这个字符数组
     string p[] = { "","shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi", "bai", "qian" };匹配,重点就是注意多个零的处理,注意看代码~~
 
代码如下:
技术分享
 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int ar[15], len;
 5 long long n;
 6 string s,p[] = { "","shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi", "bai", "qian" };
 7 void change(){
 8     reverse(s.begin(), s.end());
 9     int i, flag = 0;
10     for (i = s.size()-1; i >= 0;){
11         if (s[i]-0){
12             flag = 0;
13             cout << s[i] << p[i];
14             i--;
15         }
16         else{
17             //两个条件不能交换位置如果是6000,则最后一次i=-1,s[-1]无法访问(Runtime Error一次)
18             while (i>=0&&!(s[i]-0)){
19                 if (!(i % 4 )&& !flag){
20                     flag = 1;
21                     cout << p[i];
22                 }
23                 i--;
24             }
25             if (i >= 0)cout << "ling";
26         }
27     }
28     cout << endl;
29 }
30 
31 int main(){
32     while (cin>>s)
33         change();
34     return 0;
35 }
View Code

 

[Swust OJ 552]--拼音教学(找规律)

标签:

原文地址:http://www.cnblogs.com/zyxStar/p/4582168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!