zoukankan      html  css  js  c++  java
  • PAT 1082. Read Number in Chinese

    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,2345,6789

    #include<iostream>
    using namespace std;
    string form[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int tag=0,cnt=0,flag=0;
    void read(string s){
    	for(int i=0;i<s.size();i++){
    		int pos=s.size()-i;
    		if(s[i]=='0'){
     // 遇到0的时候,记录flag=1,等下次碰到非零的数时候在输出ling,
     //   可以避免遇到1001时输出两个ling的情况 			 
    			flag=1;
    		}else{
    			if(flag==1) cout<<" ling"; // 
    			if(tag!=1) cout<<" "; //tag=1时,是开头不能输出空格 
    			if(pos==4)
    			   cout<<form[s[i]-'0']<<" Qian";
    			else if(pos==3)
    			   cout<<form[s[i]-'0']<<" Bai";
    			else if(pos==2)
    			   cout<<form[s[i]-'0']<<" Shi";
    			else 
    			   cout<<form[s[i]-'0'];
    			flag=0; tag=0;
    		}
    	}
    }
    int main(){
    	string num,s;
    	cin>>num;
    	if(num=="0") cout<<"ling"<<endl; // 特例:0 
    	if(num[0]=='-'){
    	   cout<<"Fu "; // 处理负数 
    	   num=num.substr(1);
    	}
    	for(int i=0;i<num.size();i++){
    		int pos=num.size()-i;
            if(pos==9){ // 九位数的情况 
               cout<<form[num[i]-'0']<<" Yi";
               cnt++;
    		}
            else if(pos<=8&&pos>=5){ // 大于等于5位数的情况 
            	if(i==0) tag=1;  //tag=1时,是开头不能输出空格 
            	s=num.substr(i,num.size()-cnt-4);
            	i+=num.size()-cnt-4-1;
            	read(s);
            	cnt+=s.size();
            	cout<<" Wan";
    		}else if(pos<=4&&pos>=1){ // 小于等于4位数的情况 
                if(i==0) tag=1;   //tag=1时,是开头不能输出空格 
    			s=num.substr(i,num.size()-cnt);
            	read(s);
            	break;
    		}
    	}
    	return 0; 
    } 
    
  • 相关阅读:
    【转】浏览器的渲染:过程与原理
    DOMContentLoaded、ready、load事件的区别
    ES6中export default 与export区别
    require一个node模块什么时候需要加上.default
    【转】函数防抖与函数节流
    【转】JavaScript函数柯里化的一些思考
    【原】javascript笔记之splice和slice这两兄弟为毛这么难记
    【转】JS 的 new 到底是干什么的?
    【原】移动端vue页面点透事件
    【转】用 async/await 来处理异步
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/8409160.html
Copyright © 2011-2022 走看看