1082. Read Number in Chinese (25) PAT
2016-06-03 16:45
274 查看
注意细节,比如大小写,零的处理,以及空格
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
map<char,string>m;
map<int,string>mm;
int pp=0;
string solve(string str){
string tmp="";
if(str.length()==1&&str[0]=='0'){
return "ling";//测试点之一
}
for(int i=0;i<str.length();i++){
int ll=str.length()-i;
if(str[i]=='0'){
if((i<str.length()-1)&&str[i+1]!='0'){
tmp+=" "+m['0'];
continue;
}
else{
continue;
}
}
if(!pp){
tmp+=m[str[i]];
pp=1;
}
else{
tmp+=" "+m[str[i]];
}
if(ll>1){
tmp+=" "+mm[ll];
}
}
return tmp;
}
int main(){
m['0']="ling",m['1']="yi",m['2']="er",m['3']="san",m['4']="si",m['5']="wu",m['6']="liu",m['7']="qi",m['8']="ba",m['9']="jiu";
mm[2]="Shi",mm[3]="Bai",mm[4]="Qian";
string str;
cin>>str;
string ans="",str1="",str2="";
int flag=0,i,j,k=0;
if(str[0]=='-'){
ans+="Fu";
k=1;
pp=1;
}
if((str.length()==9&&str[0]!='-')||(str.length()==10&&str[0]=='-')){
if(str[0]=='-'){
ans+=" "+m[str[1]]+" "+"Yi";
}
else{
ans+=m[str[1]]+" "+"Yi";
}
if((str.length()==10&&str[0]=='-')){
k=2;
}
pp=1;
}
for(i=str.length()-1,j=0;j<4&&i>=k;j++,i--);
int temp=i;
for(i++;i<str.length();i++){
str1+=str[i];
}
for(j=k;j<=temp;j++){
str2+=str[j];
}
ans+=solve(str2);//转换前四位(若存在)
// cout<<str2<<endl;
if(str2.length()>0){
ans+=" Wan";
}
// cout<<str1<<endl;
ans+=solve(str1);//转换后四位
cout<<ans<<endl;
return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
map<char,string>m;
map<int,string>mm;
int pp=0;
string solve(string str){
string tmp="";
if(str.length()==1&&str[0]=='0'){
return "ling";//测试点之一
}
for(int i=0;i<str.length();i++){
int ll=str.length()-i;
if(str[i]=='0'){
if((i<str.length()-1)&&str[i+1]!='0'){
tmp+=" "+m['0'];
continue;
}
else{
continue;
}
}
if(!pp){
tmp+=m[str[i]];
pp=1;
}
else{
tmp+=" "+m[str[i]];
}
if(ll>1){
tmp+=" "+mm[ll];
}
}
return tmp;
}
int main(){
m['0']="ling",m['1']="yi",m['2']="er",m['3']="san",m['4']="si",m['5']="wu",m['6']="liu",m['7']="qi",m['8']="ba",m['9']="jiu";
mm[2]="Shi",mm[3]="Bai",mm[4]="Qian";
string str;
cin>>str;
string ans="",str1="",str2="";
int flag=0,i,j,k=0;
if(str[0]=='-'){
ans+="Fu";
k=1;
pp=1;
}
if((str.length()==9&&str[0]!='-')||(str.length()==10&&str[0]=='-')){
if(str[0]=='-'){
ans+=" "+m[str[1]]+" "+"Yi";
}
else{
ans+=m[str[1]]+" "+"Yi";
}
if((str.length()==10&&str[0]=='-')){
k=2;
}
pp=1;
}
for(i=str.length()-1,j=0;j<4&&i>=k;j++,i--);
int temp=i;
for(i++;i<str.length();i++){
str1+=str[i];
}
for(j=k;j<=temp;j++){
str2+=str[j];
}
ans+=solve(str2);//转换前四位(若存在)
// cout<<str2<<endl;
if(str2.length()>0){
ans+=" Wan";
}
// cout<<str1<<endl;
ans+=solve(str1);//转换后四位
cout<<ans<<endl;
return 0;
}
相关文章推荐
- Nginx之location 匹配规则详解
- 设计模式总结之状态模式
- qt-tcp发送和接收识别
- Hibernate-Criteria查询(2)动态查询、排序、分页、连接查询、投影查询、聚合函数
- afxwin.h 与stdafx.h
- 将博客搬至CSDN
- jQuery选择器大全整理
- Topcoder SRM 636 Div1 B
- C#队列(Queue)
- jQuery选择器大全整理
- 各个秒之间的换算率
- React confim popup components 弹出确认框组件的实现
- LeetCode-257.Binary Tree Paths
- :before
- tomcat启动正常,但是项目无法访问
- Ionic如何创建APP项目
- 强悍的 Linux —— Linux 中 TTY 是什么意思
- Hibernate-Criteria查询(1)
- 关于浏览器的回退事件
- Linux_2.6字符设备驱动实例