C 币值转换

题目:

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

输入格式:

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

输出格式:

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

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

 代码:

#include
int main(){
    char a[10];                     //数组a保存a~j
    int b[9]={1};                   //数组b保存待求9位数
    for(int i=0;i<10;i++)
        a[i]=(char)(97+i);          //数字强制转换字母
    int n,k=0,t=0;                  //代求数:n 数字长度:k 计数器:t
    
    scanf("%d",&n);
    if(n==0){                       //n=0情况!!!
        printf("a");
        return 0;
    }
        for(int j=0;j<9&&n>0;j++){  //将n各位数逆序存在b数组
            b[j]=n%10;
            k++;                    //记录n长度;
            n=n/10;
        }

    for(n=k-1;n>=0;n--){           //由大到小输出b数组
        if(b[n]==0){
            t++;                   //如果遇到0,t+1
        }
        else if(t>0&&b[n]>0){      //如果t>0即该数前面有0未打印,且该数不为0
            printf("a");           //打印一个0,然后再打印该数
            printf("%c",a[b[n]]);
            t=0;                   //一次0状况完成,计时器t置0!!!
        }
        else{                      //该数不为0,直接打印
            printf("%c",a[b[n]]);
        }
                                   //打印单位
        if(b[n]>0){
            switch (n){
                 case 8:printf("Y");break;
                 case 7:printf("Q");break;
                 case 6:printf("B");break;
                 case 5:printf("S");break;
                 case 4:printf("W");break;
                 case 3:printf("Q");break;
                 case 2:printf("B");break;
                 case 1:printf("S");break;
                 default:break;
            }
        }
        if(b[4]==0&&n==5&&t<3){   //万是特殊位置,需要特别打印!!!
            printf("W");
        }
    }
    return 0;
}

 

今天废了一个上午 做出了这道题。不断修改终于全部正确。

由大到小,先输出数字,再输出单位。 

两点需要注意:

1.数字会遇到连续或非连续的0,需要注意是否打印及单位问题。

如 100,101

2.单位万,长度大于4一般情况都需要打印,但QW、BW、SW,W为0时万不能打印。

如 100,000,001

你可能感兴趣的:(做题小能手,c语言)