您的位置:首页 > 其它

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

2015-06-16 23:48 811 查看
题目链接: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" };匹配,重点就是注意多个零的处理,注意看代码~~

代码如下:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int ar[15], len;
long long n;
string s, p[] = { "", "shi", "bai", "qian", "wan", "shi", "bai", "qian", "yi", "shi", "bai", "qian" };
void change(){
reverse(s.begin(), s.end());
int i, flag = 0;
for (i = s.size() - 1; i >= 0;){
if (s[i] - '0'){
flag = 0;
cout << s[i] << p[i];
i--;
}
else{
//两个条件不能交换位置如果是6000,则最后一次i=-1,s[-1]无法访问(runtime error一次)
while (i >= 0 && !(s[i] - '0')){
if (!(i % 4) && !flag){
flag = 1;
cout << p[i];
}
i--;
}
if (i >= 0)cout << "ling";
}
}
cout << endl;
}

int main(){
while (cin >> s)
change();
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: