题目链接
大意:根据所给数写出汉字拼音读法;
注释中有代码方便理解;
#pragma warning(disable:4996);
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<stack>
#include<math.h>
#include<vector>
using namespace std;
char num[10][5] = {
"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;//分别指字符串首尾
if (str[0] == '-') {
printf("Fu");
left++;//如果为负数,控制left位置后移;
}
while (left + 4 <= right) {
right -= 4;//将right每次左移4位,直到left与right同一节;
}
while (left < len)//每次循环处理数字的一节(4位或小于4位)
{
bool flag = false;//表示没有积累的0;
bool isprint = false;//表示该节没有输出过其中的位
while (left <= right) {
//从左至右处理数字中某节的每一位;
if (left > 0 && str[left] == '0') {
//如果当前位为0;
flag = true;
}
else {
if (flag == true) {
//如果存在累计的0
printf(" ling");
flag = false;
}
//只有不是首位(包括负号),后面的每一位前都要输出空格;
if (left > 0) printf(" ");
printf("%s", num[str[left] - '0']);//输出当前位数字;
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右移四位输出下一节;
}
return 0;
}