PAT A1082 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.

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

题意:

输入数值部分不超过9位的正负阿拉伯数字,输出其中文读数的拼音.

思路:

(1)设定一个change函数:输入4位数字的数组a,输出其读数的拼音;(枚举法实现,所有出现的情况如下:)
在这里插入图片描述
(2)以4位数字的数组为一个单位,逐个单位输出整个数字的中文读数拼音.

代码:

#include<cstdio>

char chinese[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

void change(int a[4]){
	if(a[0]!=-1&&a[1]!=-1&&a[2]!=-1&&a[3]!=-1){
		if(a[0]!=0&&a[1]!=0&&a[2]!=0&&a[3]!=0){
			printf("%s Qian %s Bai %s Shi %s",chinese[a[0]],chinese[a[1]],chinese[a[2]],chinese[a[3]]);
		}else if(a[0]!=0&&a[1]!=0&&a[2]!=0){
			printf("%s Qian %s Bai %s Shi",chinese[a[0]],chinese[a[1]],chinese[a[2]]);
		}else if(a[0]!=0&&a[1]!=0&&a[3]!=0){
			printf("%s Qian %s Bai ling %s",chinese[a[0]],chinese[a[1]],chinese[a[3]]);
		}else if(a[0]!=0&&a[2]!=0&&a[3]!=0){
			printf("%s Qian ling %s Shi %s",chinese[a[0]],chinese[a[2]],chinese[a[3]]);
		}else if(a[1]!=0&&a[2]!=0&&a[3]!=0){
			printf("ling %s Bai %s Shi %s",chinese[a[1]],chinese[a[2]],chinese[a[3]]);
		}else if(a[0]!=0&&a[1]!=0){
			printf("%s Qian %s Bai",chinese[a[0]],chinese[a[1]]);
		}else if(a[0]!=0&&a[2]!=0){
			printf("%s Qian ling %s Shi",chinese[a[0]],chinese[a[2]]);
		}else if(a[0]!=0&&a[3]!=0){
			printf("%s Qian ling %s",chinese[a[0]],chinese[a[3]]);
		}else if(a[1]!=0&&a[3]!=0){
			printf("ling %s Bai ling %s",chinese[a[1]],chinese[a[3]]);
		}else if(a[1]!=0&&a[2]!=0){
			printf("ling %s Bai %s Shi",chinese[a[1]],chinese[a[2]]);
		}else if(a[2]!=0&&a[3]!=0){
			printf("ling %s Shi %s",chinese[a[2]],chinese[a[3]]);
		}else if(a[0]!=0){
			printf("%s Qian",chinese[a[0]]);
		}else if(a[3]!=0){
			printf("ling %s",chinese[a[3]]);
		}else if(a[2]!=0){
			printf("ling %s Shi",chinese[a[2]]);
		}else if(a[1]!=0){
			printf("ling %s Bai",chinese[a[1]]);
		}
	}else if(a[0]!=-1&&a[1]!=-1&&a[2]!=-1){
		if(a[0]!=0&&a[1]!=0&&a[2]!=0){
			printf("%s Bai %s Shi %s",chinese[a[0]],chinese[a[2]],chinese[a[3]]);
		}else if(a[0]!=0&&a[2]!=0){
			printf("%s Bai ling %s",chinese[a[0]],chinese[a[2]]);
		}else if(a[0]!=0&&a[1]!=0){
			printf("%s Bai %s Shi",chinese[a[0]],chinese[a[1]]);
		}else if(a[0]!=0){
			printf("%s Bai",chinese[a[0]]);
		}
	}else if(a[0]!=-1&&a[1]!=-1){
		if(a[0]!=0&&a[1]!=0){
			printf("%s Shi %s",chinese[a[0]],chinese[a[1]]);
		}else if(a[0]!=0){
			printf("%s Shi",chinese[a[0]]);
		}		
	}else if(a[0]!=-1){
		printf("%s",chinese[a[0]]);
	}
}

int main(){
	int input[9],len=0; 
	char str[11];
	scanf("%s",str);
	if(str[0]=='-'){
		printf("Fu ");
		for(int i=1;i<11;i++){
			if(str[i]!=NULL){
				input[i-1] = str[i]-'0'; 
				len++;	
			}else
				break;
		}
	}else{
		for(int i=0;i<10;i++){
			if(str[i]!=NULL){
				input[i] = str[i]-'0'; 
				len++;
			}else
				break;
		}		
	}
	int a[4]={-1,-1,-1,-1};//所有值赋-1 
	if(len==9){
		printf("%s Yi ",chinese[input[0]]);
		int i=0;
		for(i;i<4;i++){
			a[i] = input[i+1];
		}
		change(a);
		printf(" Wan ");
		for(i;i<8;i++){
			a[i-4] = input[i+1];
		}
		change(a);
	}else if(len>4&&len<9){
		int i=0;
		for(i;i<len-4;i++){
			a[i] = input[i];
		}
		change(a);
		printf(" Wan ");
		for(i;i<len;i++){
			a[i-len+4] = input[i];
		}
		change(a); 
	}else if(len<5){
		for(int i=0;i<len;i++){
			a[i] = input[i];
		} 
		change(a);
	}
	return 0;
 } 

词汇:

negative 负数的

发布了26 篇原创文章 · 获赞 0 · 访问量 474

猜你喜欢

转载自blog.csdn.net/PanYiAn9/article/details/104045179