【PAT】 A1082 Read Number in Chinese (25分)--字符串处理

题目链接

题目详情

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.

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. 属于简单模拟题----字符串处理
  2. 但这种题不一定做起来快因为每一种情况以及特判要搞清楚,主要是要思路清晰,想清楚再做不要埋头一顿敲结果搞得很乱。
  3. 要注意数字为0的情况:碰到0是不要马上输出,而要看它之后是否非零再输出ling,同时有个特殊位置:万位为零时如果之后的千位为非0,也不要输出ling而是直接输出单位Wan
  4. 书上的参考答案有点繁琐,故不参考了

AC代码

#include<cstdio>
char shuzji[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
//char danwei[5][5] = {"Shi","Bai","Qian","Wan","Yi"} ;
bool tag = 0;
void Print_danwei(int i){
	if(i == 8){printf(" Yi");}
	else if(i == 4){printf(" Wan");}
	else if(i == 7|| i==3){printf(" Qian");}
	else if(i == 6|| i==2){printf(" Bai");}
	else if(i == 5 || i==1){printf(" Shi");}
}
void Print_shuzi(int x){
	if(tag){printf(" ");}
	else{tag = 1;}
	printf("%s",shuzji[x]);
}
int main()
{

	int n;
	scanf("%d",&n);
	if(n<0){
		printf("Fu");
		n = -n;
		tag = 1;
	}
	
	int ans[10] = {0};
	int num = 0;
	while(n!=0){
		ans[num++]=n%10;
		n = n/10;
	}

	for(int i=num-1; i>=0; i--){

		if(ans[i]!=0){
			Print_shuzi(ans[i]);
			Print_danwei(i);
		}

		else if( i==4 ){//ans[i]==0 && i==4
			printf(" Wan");
		}
		else if( ans[i-1]!=0 && i>0){
			Print_shuzi(ans[i]);  //即print: ling
		}

	}


	if(num == 0){   //特判输入n = 0的情况
		printf("ling");
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值