7-1 币值转换

币值转换

输入一个整数(位数不超过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<math.h>
int m,s=0;
int main()
{
    int i,j,k,p=1,flag=1;
    int f(int q,int m);
    scanf("%d",&m);
    for(i=0;m/p>=10;i++){
        p=pow(10,i);
        s=s+1;
    }
    if(m==0) printf("a");
    if(m<10&&m>=0) s=1;
    for(j=1;j<=s;j++){
        switch(f(j,m)){
            case 0:if(j!=s&&j!=s-4){
                if(f(j+1,m)==0) flag=0;
                else flag=1;
                if(flag)printf("a");break;
                };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; } if(f(j,m)==0&&j!=s&&j!=s-4) continue; else{ if(s==9&&j==5){ if(f(2,m)==0&&f(3,m)==0&&f(4,m)==0&&f(5,m)==0) continue; } switch(s-j){ case 1:printf("S");
break; case 2:printf("B");
break; case 3:printf("Q");
break; case 4:printf("W");
break; case 5:printf("S");
break; case 6:printf("B");
break; case 7:printf("Q");
break; case 8:printf("Y");
break; } }} return 0; } int f(int q,int m) { int k,a; if(q==1) k=m/pow(10,s-1); else{ a=m/pow(10,s-q+1); k=m/pow(10,s-q)-a*10; } return k; }

设计思路

1,开始我们需要了解一下应该存储那些数组。
2,题目说的是输入为非负整数,首先需判定输入数为0的情况
3,然后如果输入数不为0,那么将输入数从低到高取位判定。取得的当前位有0和非0之分,若当前位非0,且当前位数不为1即当前位不为个位,则存放单位与数字。注意由于一开始不知道输入数的位数,所以数组的只能从低到高,一般从0开始,先存放单位,后存放数字。若当前位为0,则可能有下几种情况流程:
1)若当前位为万位,则必存单位
2)若当前位不为万位,则又需要分情况讨论:
3)当前位为千位或个位,不存数字
4)当前位不为千位,且不为个位,但前面一位为0,也不存数字
5)当前位不为千位,且不为个位,前面一位非0,存数字
问题解决方法
遇到的问题就是switch和自定函数带入的值输错,导致结果错误,
建议把值输入那块部分进行分析。
运行结果(因为为后面自己修改了,所以只能用这张图)
原文地址:https://www.cnblogs.com/LUMO/p/10364812.html