7-1 币值转换

7-1 币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

include<stdio.h>

include<stdbool.h>

void toNUM(int n);
void toUNIT(int n);
int main()
{
bool BeginC = false;
bool Czero = false;
int a[9] = {0};
int n, i, j, tmp;
scanf("%d", &n);
for(i=100000000, j=0; i>0; i/=10)
{
a[j] = n/i;
n %= i;
j++;
}
for(i=0; i<j; i++)
{
//printf("a[%d]:%d", i, a[i]);

    if(a[i]>0)

    {
        BeginC = true;
    }
    if(BeginC)
    {
        if(a[i] != 0)
        {
            if(Czero)
            {
                if(i!=5) 
                {
                    printf("a");
                }
                Czero = false;
            }
            toNUM(a[i]);
            toUNIT(i);
        }
        if(a[i] == 0)
        {
             /**< if(i == 4)         
            if(i == 4 && ((a[1]!=0) || (a[2]!=0) || (a[3]!=0)|| (a[4]!=0))) 
                    toUNIT(i);
            Czero = true;
        }
    }
}
if(!BeginC)
{
    printf("a"); /**< 如果数组一直为0,输出0 */
}
system("pause") ;

}
void toNUM(int n)
{
switch(n)
{
case 0:
printf("a");
break;
case 1:
printf("b");
break;
case 2:
printf("c");
break;
case 3:
printf("d");
break;
case 4:
printf("e");
break;
case 5:
printf("f");
break;
case 6:
printf("g");
break;
case 7:
printf("h");
break;
case 8:
printf("i");
break;
case 9:
printf("j");
break;
default:
printf("@ERROR@");
break;
}
}
void toUNIT(int n)
{
switch(n)
{
case 0:
printf("Y");
break;
case 1:
printf("Q");
break;
case 2:
printf("B");
break;
case 3:
printf("S");
break;
case 4:
printf("W");
break;
case 5:
printf("Q");
break;
case 6:
printf("B");
break;
case 7:
printf("S");
break;
default:
printf("");
break;
}
}

原文地址:https://www.cnblogs.com/lijiawei18/p/10412086.html