【1082】Read Number in Chinese (25 分)
【摘要】
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<string>#include<algorithm> #in...
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
//key:每节每节地处理,在该节中遍历每位,如果当前位非首位且为0才令flag=true
//如果当前位非0并且flag为true则要输出ling.
//注意十百千 和 万亿 单位的输出
char num[10][5]={ //num[0]="ling" ,num[1]="yi".....
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"
};
char wei[5][5]={"Shi","Bai","Qian","Wan","Yi"};
int main(){
char str[15];
cin>>str; //按字符串方式输入数字
int len=strlen(str); //字符串长度
int left=0,right=len-1; //left与right分别指向字符串首尾元素
if(str[0] == '-'){ //如果是负数,则输出"Fu",并把left右移动右移动一位
printf("Fu");
left++;
}
while(left +4<= right){
right -=4; //将right每次左移4位,直到left与right在同一节
}
while(left < len){ //循环每次处理数字的一节(4位或小于4位)
bool flag=false; //flag==false表示没有累计的0
bool isPrint=false; //isPrint==false表示该节没有输出过其中的位
while(left <= right){ //从左至右处理数字中某节的某一位
if(left >0 && str[left] == '0'){ //如果当前位为0
flag=true;
}else{ //如果当前位不为0
if(flag==true){ //如果存在累积的0
printf(" ling");
flag=false;
}
//只要不是首尾(包括负号),后面的每一位前都要输出空格
if(left > 0) printf(" ");
printf("%s",num[str[left]-'0']);//输出当前的数字f
isPrint=true; //该节至少有一位被输出
if(left != right){ //某节中除了个位外,都要输出十百千
printf(" %s",wei[right-left-1]);
}
}
left++;
}
if(isPrint == true && right !=len-1){ //只要不是个位,就输出万或亿
printf(" %s",wei[(len-1-right)/4+2]);
}
right+=4; //right右移动4位,输出下一节
}
system("pause");
return 0;
}
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/99748122
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)