輸入一個整數(位數不超過9位)代表一個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成“貳萬叄仟壹百零捌”元。為了簡化輸出,用小寫英文字母a-j順序代表大寫數字0-9,用S、B、Q、W、Y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出為“cWdQbBai”元。
輸入格式:
輸入在一行中給出一個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換後的結果。注意“零”的用法必須符合中文習慣。
5-23 幣值轉換 (20分)
輸入一個整數(位數不超過9位)代表一個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成“貳萬叄仟壹百零捌”元。為了簡化輸出,用小寫英文字母a-j順序代表大寫數字0-9,用S、B、Q、W、Y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出為“cWdQbBai”元。
輸入在一行中給出一個不超過9位的非負整數。
在一行中輸出轉換後的結果。注意“零”的用法必須符合中文習慣。
我的解題思路,有幾個特殊情況很複雜,只能分開討論,不知道有沒有更好的方法
#include<stdio.h>
int main(){
char a[10]={'a','b','c','d','e','f','g','h','i','j'};
char b[10]={'0','S','B','Q','W','S','B','Q','Y'};
int c[10]={0};
int flag[10]={1,1,1,1,1,1,1,1,1,1,};
long n;
int len=0;
scanf("%d",&n);
long t=n;
int j;
int hou=0;
while(t>0){
c[len]=t%10;
t/=10;
len++;
}
if(n==0) printf("a");
else{
for(j=0;j<len;j++){
if(c[j]==0){
flag[j]=0;
}
else break;
}
for(j=len-1;j>=0;j--){
if(j==len-1){
if(len==1){
printf("%c",a[c[j]]);
break;
}
else if(flag[j]==1&&flag[j-1]==0){
printf("%c%c",a[c[j]],b[j]);
if(j==8||j<=4) break;
else if(j>4&&j<8){
printf("W");
break;
}
}
else printf("%c%c",a[c[j]],b[j]);
}
else if(j>4){
if(c[j]!=0&&flag[j]==1&&flag[j-1]==0){
printf("%c%cW",a[c[j]],b[j]);
break;
}
else if(c[j]!=0) printf("%c%c",a[c[j]],b[j]);
else if(c[j]==0&&c[j-1]!=0) printf("a");
}
else if(j==4){
if(c[j]!=0&&flag[j]==1&&flag[j-1]==0){
printf("%c%c",a[c[j]],b[j]);
break;
}
else if(c[j]!=0) printf("%c%c",a[c[j]],b[j]);
else if(c[j]==0&&c[j-1]!=0) printf("Wa");
}
else if(j<4&&j>0){
if(c[j]!=0&&flag[j]==1&&flag[j-1]==0){
printf("%c%c",a[c[j]],b[j]);
break;
}
else if(c[j]!=0) printf("%c%c",a[c[j]],b[j]);
else if(c[j]==0&&c[j-1]!=0) printf("a");
}
else if(j==0){
printf("%c",a[c[j]]);
}
}
}
return 0;
}