输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 32
typedef struct _node {
char zhwen;
char zhnum;
struct _node *next;
} Node;
int main( int argc, const char *argv[] )
{
const char chwen[]="SBQWSBQYSBQ";
char num[MAXN]={0};
char chnum[MAXN]={0};
if ( scanf("%s", num)==EOF ) printf("error\n");
int i,j=0;
for ( i=strlen(num)-1; i>=0; --i ) {
chnum[j++]=num[i]-'0'+'a';
}
Node *tail = (Node*)malloc(sizeof(Node));
tail->zhnum = chnum[0];
tail->zhwen = '\0';
tail->next = NULL;
Node *p = tail;
for ( i=1; i<strlen(chnum); ++i ) {
Node *head = (Node*)malloc(sizeof(Node));
head->zhwen=chwen[i-1];
head->zhnum=chnum[i];
head->next=p;
p=head;
}
int lastzhnum=1, flag=1;
if ( p->next == NULL ) {
printf("%c", p->zhnum);
free(p);
return 0;
}
while ( p->next != NULL ) {
if ( p->zhnum != 'a' ) {
flag=1;
if ( p->zhwen == 'Y' ) flag=0;
if ( lastzhnum ) {
printf("%c%c", p->zhnum, p->zhwen);
} else {
printf("a%c%c", p->zhnum, p->zhwen);
}
Node *rm=p;
p=p->next;
free(rm);
lastzhnum=1;
} else {
if ( flag && p->zhwen == 'W' ) {
printf("%c", p->zhwen);
} else if ( flag && p->zhwen == 'Y' ) {
printf("%c", p->zhwen);
flag = 0;
}
Node *rm=p;
p=p->next;
free(rm);
lastzhnum=0;
}
}
if ( p->zhnum != 'a' && lastzhnum == 1 ) {
printf("%c", p->zhnum);
} else if ( p->zhnum != 'a' && lastzhnum == 0 ) {
printf("a%c", p->zhnum);
}
free(p);
return 0;
}