• pat解题报告【1082】


    1082. Read Number in Chinese (25)

    时间限制  
    400 ms
    内存限制  
    32000 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
    
     
    简单的模拟。仅仅是过程描写叙述有点啰嗦。
    首先这句话什么意思  Note: zero ("ling") must be handled correctly according to the Chinese tradition
    什么叫Chinese tradition,事实上就是对0的特殊处理。
    【1】尾部的0不发音
    【2】多个连续的0,仅仅发一个音
    【3】多个不连续的0。都要发音
    【4】大于4位的数肯定要发 Wan 音
    【5】大于8位的数一定要发 Yi 音
    并且还有个规律: Shi Bai Qian 这三个音循环出现。

     
    Ac代码:
     
    // pat-1082.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    #include "iostream"
    #include "string"
    #include "algorithm"
    #include "vector"
    #include "stack"
    
    using namespace std;
    stack<string> ans;
    string num[]={"ling", "yi" ,"er" , "san" , "si" ,  "wu",  "liu" , "qi",  "ba",  "jiu"};
    string pos[]={ "Shi","Bai","Qian", "Wan","Yi" };
    int main()
    {
    	long int n=0;
    	bool firstout=true;
    	cin>>n;
    	if (n==0)
    	{
    		cout<<"ling";
    		goto end;
    	}
    	if (n<0)
    	{   
    		cout<<"Fu";
    		firstout=false;
    		n=-(n);
    	}
    	int cnt=0;
    	bool wan_flag=false;
    	bool zero=false;
    	bool first=true;
    	while(n)
    	{
    	  int temp=n%10;
    	  //0 特殊处理
    	  if (temp==0)
    	  { 
    		  if (cnt==3)
    		  {
    			  wan_flag=true;
    		  }
    		  n/=10;
    		  if (!first)
    		  {  
    			  cnt++;
    		  }
    	      first=false;
    		  if (zero)//第一次遇到0
    		  {
    			  ans.push(num[0]);
    			  zero=false;
    			  continue;
    		  }
    		  else
    		  {
    			  continue;
    		  }
    	  }
    	  zero=true;
    	  if(first)//忽略个位
    	  {
    		    ans.push(num[temp]);//yi er san si ~~~~~
    			 n/=10;
    			  first=false;
    			 continue;
    	  }
    	 if(cnt<7)
    	 {  
    		 if (wan_flag)
    		 {
    			 wan_flag=false;
    			 ans.push(pos[3]);
    		 }
    	     ans.push(pos[cnt%4]);//shi bai qian wan 
    	  }
    	 else
         {
    	  ans.push(pos[4]);//yi
    	 }
    	 
    	  ans.push(num[temp]);//yi er san si ~~~~~
    	 
    	  n/=10;
    	  cnt++;
    	 
    	}
    	while (!ans.empty())
    	{
    		string temp=ans.top();
    		ans.pop();
    		if (firstout)
    		{
    			firstout=false;
    			cout<<temp;
    			continue;
    		}
    		cout<<" "<<temp;
    	}
    end:	return 0;
    }
    
    

     
     
  • 相关阅读:
    [Python]爬虫v0.1
    [Python]同是新手的我,分享一些经验
    [python]闭包到底是什么鬼?
    测试Flask应用_学习笔记
    Flask模板_学习笔记
    SQL Server Alwayson概念总结
    JDBC数据库编程:ResultSet接口
    JDBC操作,执行数据库更新操作
    接口怎么实例化?
    java数据库编程:JDBC操作及数据库
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6875158.html
Copyright © 2020-2023  润新知