• PAT1082:Read Number in Chinese


    1082. Read Number in Chinese (25)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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

    思路

    逻辑题,有点恶心。。。
    1.先输入一个数,将单个零和负数的情况先处理掉(后续将1亿的情况也单独处理掉)。
    2.将该数的每一位数字用一个int数组的形式存放。
    3.遍历该数组,根据该数组的每一位的位数和单个数字将对应的字符串插入到一个新的vector中,为0的位数除了是万位或者亿位以外都不用插入位数的字符串。
    4.对于多余的零做处理,并输出每一位的数字和位数。

    代码
    #include<iostream>
    #include<vector>
    using namespace std;
    vector<string> n={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    vector<string> digit={"","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"};
    
    using namespace std;
    int main()
    {
       vector<string> res;
       vector<int> number;
       int num,index;
       cin >> num;
       if(num == 0)
       {
          cout << "ling" << endl;
          return 0;
       }
       else if( num < 0)
       {
           cout << "Fu ";
           num = -num;
       }
       while(num != 0)
       {
           number.push_back(num % 10);
           num /= 10;
       }
    
       for(index = 0;index < number.size() && number[index] == 0;index++);
       if(index == 8)
       {
           cout << n[number[index]] << " Yi";
           return 0;
       }
       for(int i = index;i < number.size();i++)
       {
           if(i != 0 && (number[i] != 0 || i == 4 || i == 8))
              res.push_back(digit[i]);
           res.push_back(n[number[i]]);
       }
       for(int i = res.size() - 1;i >= 0;i--)
       {
           if(i != res.size() - 1)
            cout << " ";
           int zerocnt = 0;
           while( i >= 0 && res[i] == "ling")
           {
               i--;
               zerocnt++;
           }
           if(zerocnt > 0 && res[i] != "Wan")
           {
               cout << "ling ";
           }
           cout << res[i];
       }
    }
    
    
    

      

     
  • 相关阅读:
    查看pip install *.whl 支持的文件版本
    spark Infinate 的处理
    nc 文件的nan识别
    mysql 存中文失败问题
    tensorflow 安装
    数据库存含中文的json 时避免存成中文的ascii
    python 继承中的__init__
    python mysql数据库中 json的存储
    python 版本配置问题
    python dict 实现swich
  • 原文地址:https://www.cnblogs.com/0kk470/p/7903587.html
Copyright © 2020-2023  润新知