【PAT-A】1082. Read Number in Chinese 写题记录

这一题写了很久,主要是细节问题。

①格式错误了很多次,主要是printf("%s %s")这里出问题

②思路主要是对于0怎么处理

    1、如果是9位数,万位一旦出现0,就要输出Wan

    2、如果是5位数到8位数,一定会输出Wan

    3、出现0后,遇到非0的数时,只输出1个ling

其他的就是,输出那个数,再输出它的单位即可

#include <cstdio>
#include <cstring>
const char danwei[9][8]={" Yi"," Qian"," Bai"," Shi"," Wan"," Qian"," Bai"," Shi",""};
const char dig[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
	char input[13];
	char fuhao;
	scanf("%c",&fuhao);
	if (fuhao == '-') {  //符号位单独处理,不计入input中
		printf("Fu ");
		scanf("%s",&input);
	}
	else{
		input[0]=fuhao;
		scanf("%s",&input[1]);
	}
	int len = strlen(input);
	int i=0;
	bool flag=true; //用来判断是否是出现连续0
	while (i<len){
	
		if (input[i] == '0'){
			flag = false;  //出现0则flag变化
			if (9-len+i == 4 && (len<=8 && len>=5)) {  //如果是情况2,输出万,flag重置
				printf(" Wan");
				flag = true;
			}
			if (9-len+i == 4 && len == 9 && (input[1] !='0' || input[2] !='0'||input[3] !='0')) {  //如果是情况1,输出万,flag重置
				printf(" Wan");
				flag = true;
			}
		}
		else {  
			if (flag == false) printf(" ling");  //情况3 碰到非0数字,若之前是有0则输出
			flag = true;
			if (i==0) printf("%s%s",dig[input[0]-'0'],danwei[9-len+i]);
			else printf(" %s%s",dig[input[i]-'0'],danwei[9-len+i]);
		}
		i++;
	}
	if (len==1 && input[0]=='0') printf("ling"); //一位的0单独考虑
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43456345/article/details/85100676