当前位置: 代码迷 >> 综合 >> 1082 Read Number in Chinese(25 分)
  详细解决方案

1082 Read Number in Chinese(25 分)

热度:93   发布时间:2023-12-25 03:29:58.0

思路分析:
注意0的处理,如100000001,100020;还有末尾空格的输出

#include"stdio.h"
#include<string>
#include<iostream>
#include <sstream>
using namespace std;
const int maxn = 20;
int main() {ostringstream result;int x, cnt = 0, n[15];scanf("%d",&x);bool wan_flag = false;      //万位是否全部为0if ((x % 100000000) / 10000 == 0) wan_flag = true;if (x == 0) { printf("ling\n");   return 0; }if (x < 0) {x = (-1)*x;printf("Fu ");}while (x > 0) {n[cnt++] = x % 10;x /= 10;}string num[10] = { "ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu " };string gra[10] = {
   "Shi ","Bai ","Qian ","Wan ","Yi " };int i = cnt / 4;int j = cnt - 1 - i * 4;bool flag1 = false;     //上一个输出为0记为true;while (i >= 0) {bool zero_flag = false;     //判断是否输出0for (; j>=0; j--) {bool flag0 = false;     //当前数为0记为true;if (n[i * 4 + j] == 0) {for (int temp_j = j; temp_j >= 0; temp_j--) {if (n[i * 4 + temp_j] != 0) zero_flag = true;}flag0 = true;}if (n[i * 4 + j] == 0 && zero_flag==true && flag1==false) {result << num[n[i * 4 + j]];zero_flag = false;flag1 = true;}else if (n[i * 4 + j] != 0) {result << num[n[i * 4 + j]];zero_flag = false;flag1 = false;}if ((i * 4 + j) % 4 == 0) {if (i ==2) result << gra[2 + i];else if (i == 1 && wan_flag==false) result << gra[2 + i];}else if (flag0 == false) {result << gra[j - 1];}}i--;j = 3;}string resultstr = result.str();resultstr = resultstr.substr(0, resultstr.length() - 1);    //将末尾的空格去掉cout << resultstr << endl;return 0;
}

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.

Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.

Output Specification:
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.

Sample Input 1:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:
yi Shi Wan ling ba Bai

  相关解决方案