• 寒假二:币值转换


     
     
    7-1 币值转换 (20 分)

    输入一个整数(位数不超过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 result (int n)
    {
        switch(n)
            {
                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 product (int m)
    {
        switch(m)
            {
                case 1: printf("");break;
                case 2: printf("S");break;
                case 3: printf("B");break;
                case 4: printf("Q");break;
                case 5: printf("W");break;
                case 6: printf("S");break;
                case 7: printf("B");break;
                case 8: printf("Q");break;
                case 9: printf("Y");break;
         }
    }
    int main()
    {
        int n,a,b=1,c[10]={0,1,2,3,4,5,6,7,8,9},d,e;
        scanf("%d",&n);
        for (a=0; n/b>=10; a++) {
            b=pow(10,a);
        }
            e=a;
        for(a=a; a>0; a--)
        {
            c[a]=n/pow(10,a-1);
            d=pow(10,a-1);
            b=n%d;
            n=b;
        } 
        if(e==0)    printf("a");
        else if(e%100000000==0) {   
                        result (e/100000000);
                    printf("Y");
                }
        else
            for(e=e; e>0; e--)
            {
                if(c[e]!=0) 
                    if(c[e+1]==0)
                    {
                        printf("a");
                        result (c[e]);
                        product (e);
                    }           
                    else
                    {   
                        result (c[e]);
                        product (e);
                    }
                else if(e==5)   printf("W");
            }       
    }
    

      设计思路

    第一步:定义变量表示输入的数据,再定义一个数组,在后面对输入数据的位数进行对应;
    第二步:定义两个函数,主要作用是对位数及数字进行对应的转换,利用switch语句进行单个对应转换;
    第三步:首先,对输入数据进行位数判断,利用for语句,然后再将这个数利用数组表示;
    第四步:接下来就是对这个数的每一位进行判断是否为零,若非零,则分别利用自定义函数进行数字,位数进行对应输出;
    第五步:再利用递减原理将这个数从高位到低位输出完为止。

         本题调试过程碰到的问题及解决方法

    如图

    问题:

    在最开始的时候,数组定义为九个元素的数组,因为亿位就是第九位,但忽略了九个都是零的情况,也就是还有第十位,所以部分正确;

    解决方法:

    将数组改为十个元素的数组,即可。

         运行结果截图

     
  • 相关阅读:
    #575. 「LibreOJ NOI Round #2」不等关系
    P4494 [HAOI2018]反色游戏
    P6378 [PA2010] Riddle
    子集卷积
    躯壳
    C++11、14、17里的lambda表达式简介
    数据结构与算法复习——7、斐波那契堆和配对堆
    数据结构与算法复习——6、二项队列及其分析
    数据结构与算法复习——5、摊还分析入门
    高等代数(二)预习——4、唯一因式分解定理
  • 原文地址:https://www.cnblogs.com/li-xue/p/10409834.html
Copyright © 2020-2023  润新知