7-23 币值转换

题目

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

链接

https://pintia.cn/problem-sets/14/problems/803icon-default.png?t=M276https://pintia.cn/problem-sets/14/problems/803

输入格式

输入在一行中给出一个不超过9位的非负整数。

输出格式

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1

813227345

输出样例1

iYbQdBcScWhQdBeSf

输入样例2

6900

输出样例2:

gQjB

 

解题思路

按题目来讲,其实读出就是差不多让我们读作这些数字。所以我们可以创一个函数。

//创建函数
int jiance(int a)//数字转换
{
    switch(a)
    {
        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;
    }
}
//创建函数
int weisu(int a)//位数转换
{
    switch(a)
    {
        case(0):break;
        case(9):printf("Y");break;
        case(8):printf("Q");break;
        case(7):printf("B");break;
        case(6):printf("S");break;
        case(5):printf("W");break;
        case(4):printf("Q");break;
        case(3):printf("B");break;
        case(2):printf("S");break;
    }
}

然后我们需要一个数组存入这些数。

    int rmb,a=0,b=0,i=9,j=0,k=10,l=0,f=0,d=0;
    int sz[10]={0,0,0,0,0,0,0,0,0,0};//数组
    scanf("%d",&rmb);
    while(rmb>0)//存入数组
    {
    	if(rmb<10)//是否为一位数
    	{
    		a=rmb;
    		sz[i]=a;
    		break;
		}
		else
		{
			a=rmb%10;//取最后一位
	        rmb/=10;//再把最后一位去掉
	        sz[i]=a;//保存到数组
	        i--;
		}
    }
    if(rmb==0)
    {
        printf("a");//特殊情况
        return 0;
    }

因为我们用的是数组。 所以前头可能会有零。所以我们可以把前面的零给去掉。这样打印的时候就不会错误。然后后面的零是要的,后面的零我们也要知道有多少个,需要一个变量计数,方便打印。

最后我们用函数打印。

//打印
    for(i=9;i>0;i--) //
	{                //
        if(sz[i]!=0) //
            break;   //数组后头去0
        else         //
        {
            sz[i]=-3;//
            //k--;
        }
    }
    for(i=0;i<10;i++)//
	{                //
        if(sz[i]!=0){//
            j=1;     //
        }else         //
            if(j!=1) //数组前头去0
            {        //
                j=0; //
                sz[i]=-1;
                k--; //k==位数
            }        //
    }
       for(i=0;i<10;i++)
       {
           if(sz[i]==0&&f==0)
             {
                 f++;
             }
           else if(sz[i]==0)
           {
               sz[i]=-2;//数中间零
               d++;
           }
       }
       for(i=0;i<10;i++)
       {
           if(sz[i]==-1)
           {
               continue;//数组前头零
           }
           if(sz[i]==-3)
           {
               break;//数组后头零
           }
           if(sz[i]==-2||sz[i]==0)
           {
               if(sz[i]==0&&d>=1&&(k==5||k==6))//不超过亿,中间连续多0
               {
                   weisu(5);//调用函数
               }
               jiance(sz[i]);//调用函数
               k--;          //数组中间零
               continue;
           }
            jiance(sz[i]);//调用函数
            weisu(k);//调用函数
           k--;
           if(sz[i]==0&&k==5)
           {
               weisu(k);//调用函数
           }
       }

源代码

#include<stdio.h>
int jiance(int a);//函数
int weisu(int a);//函数

int main()
{
    int rmb,a=0,b=0,i=9,j=0,k=10,l=0,f=0,d=0;
    int sz[10]={0,0,0,0,0,0,0,0,0,0};//数组
    scanf("%d",&rmb);
    while(rmb>0)//存入数组
    {
    	if(rmb<10)//是否为一位数
    	{
    		a=rmb;
    		sz[i]=a;
    		break;
		}
		else
		{
			a=rmb%10;//取最后一位
	        rmb/=10;//再把最后一位去掉
	        sz[i]=a;//保存到数组
	        i--;
		}
    }
    if(rmb==0)
    {
        printf("a");
        return 0;
    }
//打印
    for(i=9;i>0;i--) //
	{                //
        if(sz[i]!=0) //
            break;   //数组后头去0
        else         //
        {
            sz[i]=-3;//
            //k--;
        }
    }
    for(i=0;i<10;i++)//
	{                //
        if(sz[i]!=0){//
            j=1;     //
        }else         //
            if(j!=1) //数组前头去0
            {        //
                j=0; //
                sz[i]=-1;
                k--; //k==位数
            }        //
    }
       for(i=0;i<10;i++)
       {
           if(sz[i]==0&&f==0)
             {
                 f++;
             }
           else if(sz[i]==0)
           {
               sz[i]=-2;//数中间零
               d++;
           }
       }
       for(i=0;i<10;i++)
       {
           if(sz[i]==-1)
           {
               continue;//数组前头零
           }
           if(sz[i]==-3)
           {
               break;//数组后头零
           }
           if(sz[i]==-2||sz[i]==0)
           {
               if(sz[i]==0&&d>=1&&(k==5||k==6))//不超过亿,中间连续多0
               {
                   weisu(5);//调用函数
               }
               jiance(sz[i]);//调用函数
               k--;          //数组中间零
               continue;
           }
            jiance(sz[i]);//调用函数
            weisu(k);//调用函数
           k--;
           if(sz[i]==0&&k==5)
           {
               weisu(k);//调用函数
           }
       }
    return 0;
}
//创建函数
int jiance(int a)
{
    switch(a)
    {
        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;
    }
}
//创建函数
int weisu(int a)
{
    switch(a)
    {
        case(0):break;
        case(9):printf("Y");break;
        case(8):printf("Q");break;
        case(7):printf("B");break;
        case(6):printf("S");break;
        case(5):printf("W");break;
        case(4):printf("Q");break;
        case(3):printf("B");break;
        case(2):printf("S");break;
    }
}

!!!您的点赞和支持,是我更新的最大动力!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值