输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
以下代码测试点2未通过,不超过亿,中间连续多0,我觉得我考虑了这个问题诶,不知道为什么不能通过……
#include <stdio.h>
#include <string.h>
int main(){
char str[10];
char t[] = "0SBQWSBQY";
int i = 0, j, len, cnt, p = 0;
int tlen, sign = 1;
gets(str);
len = strlen(str);
tlen = len;
while (str[i] != '\0'){
if (str[i] == '0'){
p++;
// flag = 1;
}
if (str[i] != '0'){
p = 0;
// flag = 0;
}
if (str[i]=='0'&&p==1 || str[i]!='0'){
putchar(str[i]-'0'+'a');
}
if (t[tlen-1]!='0' && str[i]!='0'){
putchar(t[tlen-1]);
if (len>5 && len<9 && str[len-5]=='0'&&sign==1){
putchar('W');
sign = 0;
}
}
cnt = 0;
for (j=i+1; j<len; j++){
if (str[j] == '0'){
cnt++;
}
}
if (cnt + i + 1 == len){
break;
}
i++;
tlen--;
}
return 0;
}
学习其他博主的代码, 通过了这道题目。这位博主的代码非常巧妙,代码的详细注释请参考[PTA]7-23 币值转换
#include <stdio.h>
#include <string.h>
int main(){
char str[10], ret[10];
int len, i;
gets(str);
// char *ret = strrev(str);
len = strlen(str);
for (i=0; i<len; i++){
ret[i] = str[len-i-1];
}
if (ret[0]== '0' && len==1){
putchar('a');
}
else{
char cunit[9] = {'\0', 'S', 'B', 'Q', 'W', 'S', 'B', 'Q', 'Y'};
for (i=len-1; i>=0; i--){
if (ret[i] != '0'){
putchar(ret[i] - '0' + 'a');
putchar(cunit[i]);
}
else if (i == 4){
if (ret[5]!='0' || ret[6]!='0' || ret[7]!='0'){
putchar('W');
}
}
else if (i-1>=0 && ret[i-1]!='0'){
putchar('a');
}
}
}
return 0;
}