输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
我写的代码其实是烂代码,比好的答案长很多,不过它有一定的通用性,记录一下。实际解题竞赛里面,代码越短越好,通不通用不是最重要的。。毕竟考试时间就那么点。
#include <stdio.h>
#include "string.h"
int main(){
long n;
char unit[][4]={"S","B","Q","W","Y"};//{"拾","百","仟","万","亿"}
char num[][4]={"a","b","c","d","e","f","g","h","i","j"};//{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char out[100][4];
int i,j=0,len;
scanf("%ld",&n);
if(n==0){
printf("%s\n",num[0]);
return 0;
}
for(i=0;n>0;i++){
int t=n%10;
if(t || i==4){
if(i-1>=0){
if(i-1<4){
strcpy(&out[j++], &unit[i-1]);
}else{
if(i-5>=0){
if(i-5<=2){
strcpy(&out[j++], &unit[i-5]);
}else if(i==8){
strcpy(&out[j++], &unit[4]);
}
}
}
}
}
strcpy(&out[j++], &num[t]);
//printf("%s",num[t]);
n/=10;
}
len=j;
for(int k=0;k<len;k++){
if(strcmp(&out[k], &num[0])!=0){
break;
}else{
strcpy(&out[k],"");
}
}
// for(j=len-1;j>=0;j--){
// printf("%s",out[j]);
// }
// printf("\n");
int flag=0;
for(int k=0;k<len;k++){
if(strcmp(&out[k], &num[0])==0 && flag ==1){
strcpy(&out[k],"");
}else if(strcmp(&out[k], &num[0])==0 && flag ==0){
flag=1;
}else if(strcmp(&out[k], &num[0])!=0 && flag==1){
flag=0;
}
}
for(int k=0;k<len;k++){
if(strcmp(&out[k], &unit[3])==0 && strcmp(&out[k+1], &num[0])==0){
strcpy(&out[k+1],"");
}
}
for(j=len-1;j>=0;j--){
printf("%s",out[j]);
}
printf("\n");
return 0;
}