这一题写了很久,主要是细节问题。
①格式错误了很多次,主要是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;
}