zoukankan      html  css  js  c++  java
  • A1082 Read Number in Chinese [汉字读数字]

    在这里插入图片描述
    ———————————————————————————
    这是简单模拟中最难的一道题,我也是想了很久,这题放考场上我肯定是做不出的,最后算是看懂了,然后把思路说一下,感觉网上思路都没有说的很清楚。
    思路 :

    1. 首先它是分字节来处理,这里的字节不是计算机中的byte,而是数字的字节,4位后是万,在4位是亿,然后从右到左每4个节处理一次,高位不足4位的就直接处理。
    2. 每个节内处理就是非零的数就读出相应的数字和位数,当做一个4位数字来读。
    3. 每读完4位数字要看这个数字是否大于5位,大于5位就最后还要读出相应的万或者亿。
    4. 如果有连续的0出现在非零数字之间,如100001注意只要读出一个ling。
    #include<iostream>
    #include<string>
    using namespace std;
    string num[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
    string wei[5] = { "Shi","Bai","Qian","Wan","Yi" };
    int main()
    {
    	string s;
    	getline(cin, s);
    	int length = s.length();
    	int left = 0, right = length - 1;
    	if (s[0] == '-')
    	{
    		cout << "Fu";
    		left++;
    	}
    	while (left + 4 <= right)           //从右到左每四位为一节,按节处理,多余的直接处理
    		right -= 4;
    	while (left < length)
    	{
    		bool flag = false;   //表示没有累计的0
    		bool isprint = false;  //表示该节没有输出过其中的位(如果是个位,不用输出后面的位数)
    		while (left <= right)
    		{
    			if (left > 0 && s[left] == '0') //如果当前位为0
    			{
    				flag = true;
    			}
    			else //如果当前位不为0
    			{
    				if (flag == true) //存在多个累计的0 只输出一遍ling就行
    				{
    					cout << " ling";
    					flag = false;
    				}
    				if (left > 0)
    					cout << " ";
    				cout << num[s[left] - '0'];
    				isprint = true;
    				if (left != right)  //某个节中除了个位外,都需要输出十百千
    				{
    					cout << " "<<wei[right - left - 1];
    				}
    			}
    			left++;
    		}
    		if (isprint && right != length - 1)     //只要不是个位,输出万和亿
    		{
    			cout << " "<<wei[(length - 1 - right) / 4 + 2]; //存在一个节 输出万 存在两个节 输出亿不会超过9个数
    		}
    		right += 4;
    	}
    	return 0;
    }
    
  • 相关阅读:
    C++优化和计算速度(碎碎念)
    架设一个p2p存储网络的问题(讨论)
    JAVA做敏感词统计——DFA 算法
    卸载Postman,用IntelliJ IDEA发起http请求
    LPC1788SDRAM调试
    ASP.NET网站大附件上传配置
    K2 Blackpearl中从数据库直接删除流程实例之K2Server表
    K2流程实例出错,切换到其他版本运行
    使用K2时提示未能加载文件或程序集Microsoft.IdentityModel等
    K2 Blackpearl中从数据库直接删除流程实例之K2ServerLog表
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13812086.html
Copyright © 2011-2022 走看看