PAT 甲级 1082 Read Number in Chinese (25 分)

题目描述

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.

输入

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

输出

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.

思路

字符串打表,注意0这个关键的,出现在两个其他数字之间要读出来

代码

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<vector>
using namespace std;
vector<string> ch;
void shu(char c)
{
    
    
	switch (c)
	{
    
    
	case '1':
		ch.push_back("yi");
		break;
	case '2':
		ch.push_back("er");
		break;
	case '3':
		ch.push_back("san");
		break; 
	case '4':
		ch.push_back("si");
		break;
	case '5':
		ch.push_back("wu");
		break;
	case '6':
		ch.push_back("liu");
		break;
	case '7':
		ch.push_back("qi");
		break;
	case '8':
		ch.push_back("ba");
		break;
	case '9':
		ch.push_back("jiu");
		break;
	}
}
int main()
{
    
    
	char str[100] = {
    
     0 };
	cin.getline(str, 100);
	int start = 0;
	if (str[0] == '-')
	{
    
    
		printf("Fu ");
		start = 1;
	}
	int len = strlen(str);
	int zero = 0;
	int wan = 0;
	for (int i = start; i < len; i++)
	{
    
    
		if (wan == 1 && len - i == 4)
		{
    
    
			ch.push_back("Wan");
		}
		if (str[i] != '0' && zero == 1)
		{
    
    
			ch.push_back("ling");
			zero = 0;
		}
		shu(str[i]);
		if (str[i] == '0')
		{
    
    
			zero = 1;
			continue;
		}
		if (len - i > 4 && len - i<9)
		{
    
    
			wan = 1;
		}
		if (len - i == 9)
		{
    
    
			ch.push_back("Yi");
		}
		else if ((len - i) % 4 == 0)
		{
    
    
			ch.push_back("Qian");
		}
		else if ((len - i) % 4 == 3)
		{
    
    
			ch.push_back("Bai");
		}
		else if ((len - i) % 4 == 2)
		{
    
    
			ch.push_back("Shi");
		}
	}
	for (int i = 0; i < ch.size(); i++)
	{
    
    
		cout << ch[i];
		if (i < ch.size() - 1)
		{
    
    
			cout << " ";
		}
	}
	if (ch.size() == 0)
	{
    
    
		printf("ling");
	}
	cout << endl;
}

猜你喜欢

转载自blog.csdn.net/qq_45478482/article/details/120096317