目录
首先,先贴柳神的博客
想要刷好PTA,强烈推荐柳神的博客,和算法笔记
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output Fu first if it is negative. For example, -123456789 is read as Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu. Note: zero (ling) must be handled correctly according to the Chinese tradition. For example, 100800 is yi Shi Wan ling ba Bai.
Each input file contains one test case, which gives an integer with no more than 9 digits.
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
-123456789
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
100800
yi Shi Wan ling ba Bai
就是给你一个数字,让你用中国的读法输出出来
① 找到这个九位数字的特点,可以把它4个一分为一节
② 用两个bool类型的量
一个用来判断一节里面有没有零
一个用来判断一节里面有没有已经输出的数
具体的我也不是很懂,这题是抄的算法笔记的
#include<cstdio>
#include<string>
#include<iostream>
#include<cstring>
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; //left与right分别指向字符串的首尾元素
if (str[0] == '-') {
printf("Fu"); //如果是负数
left++;
}
while (left + 4 <= right) {
right -= 4; //将right每次左移4位,直到left与right在同一节
}
while (left < len) { //循环每次处理数字的一节(4位或小于4位)
bool flag = false; //flag==flase 表示没有积累的0
bool isPrint = false; //isPrint==false 表示该节没有输出过其中的位
while (left <= right) {
if (left > 0 && str[left] == '0') {
flag = true; //令标记flag为true
}
else {
if (flag == true) {
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++; //left右移1位
}
if (isPrint == true && right != len - 1) {
printf(" %s", wei[(len - 1 - right) / 4 + 2]);
}
right += 4; //right右移4位,输出下一节
}
return 0;
}PTA甲级1082 Read Number in Chinese (25分)
原文:https://www.cnblogs.com/a-small-Trainee/p/12392695.html