输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
结尾无空行
输出样例1:
iYbQdBcScWhQdBeSf
结尾无空行
输入样例2:
6900
输出样例2:gQjB
起初也有些小毛病,在网上看了很多都有些小毛病,然后自己想了几小时调整好了。
代码如下:
#include <stdio.h>
#include <string.h>
void cou_switch(int* p)
{
switch (*p)
{
case 1:
case 5:
case 9:printf("S"); break;
case 2:
case 6:printf("B"); break;
case 3:
case 7:printf("Q"); break;
case 4:printf("W"); break;
case 8:printf("Y"); break;
}
}
int main(void)
{
void count(char* p, int n,int *k,int *j);
char arr[100] = { 0 };
scanf_s("%s", arr, 100);
int i = 0;
int len = strlen(arr);
while (i < len)
{
arr[i] = arr[i] + 49;
i++;
}
i--;
if (arr[0] == 'a')
{
printf("a");
return 0;
}
int k = 0,flag=1;
for (; i >= 0; i--, k++)
{
char* p = &arr[k];
while (*p != '\0' && *p=='a')
{
p++;
}
if (*p == '\0')
{
break;
}
if (arr[k] != 'a')
{
flag = 1;
}
if (flag==1)
{
printf("%c", arr[k]);
}
if (arr[k] == 'a')
{
flag = 0;
}
int a = 0;
if (arr[k] != 'a')
{
switch (i)
{
case 1:
case 5:
case 9:printf("S"), count(&arr[k], 1, &k, &i); break;
case 2:
case 6:printf("B"),count(&arr[k], 2,&k,&i); break;
case 3:
case 7:printf("Q"),count(&arr[k],3,&k,&i); break;
case 4:printf("W"); break;
case 8:printf("Y"); break;
}
}
}
return 0;
}
void count(char* p, int n,int *k,int *j)
{
int a = 0;
p++;
int temp = n;
char* pp = p;
while ((n!=0)&&(*p=='a'))
{
p++;
n--;
}
int c = p - pp;
if (p - pp == temp )
{
*k += temp;
*j -= temp;
cou_switch(j);
}
}