zoukankan      html  css  js  c++  java
  • 寒假编程总结二

    7-1 币值转换 (20 分)

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

     

    1)   实验代码:

     

    #include<stdio.h>

    #include<math.h>

    int main()

    {

        int yuan,chu_2,chu_1,i,p,a=0;

        char op;

        scanf("%d",&yuan);

       

        chu_1=yuan;

        for(i=-1;chu_1!=0;i++){   

            chu_1=chu_1/10;

        }

        int A[i];

        chu_1=yuan;

        for(a=0;chu_1!=0;i--,a++){    //从最大数位开始逐个取出各数字

            p=pow(10,i);

            chu_2=chu_1/p;

            chu_1=chu_1%p;  

            switch(chu_2){     //从最大数位开始逐个输出 

                 case 0:op='a';break;

                 case 1:op='b';break;

                 case 2:op='c';break;

                 case 3:op='d';break;

                 case 4:op='e';break;

                 case 5:op='f';break;

                 case 6:op='g';break;

                 case 7:op='h';break;

                 case 8:op='i';break;

                 case 9:op='j';break;

            }

            A[a]=chu_2; //记录数字

            if(chu_2==0){ //零为特殊情况,需要单独判断

                 if(i==6&&A[a-1]!=0)

                     printf("W");

                 if(i==5&&A[a-1]!=0)

                     printf("W");

                 if(i==4&&A[a-1]!=0)

                     printf("W");

                 if(A[a-1]!=0&&i<8)     //若前一位不为零,则输出零

                     printf("%c",op);

            }

            if(chu_2!=0)     //不为零的情况可以直接按规律输出

                 printf("%c",op);

            if(i==5&&chu_2!=0)     //当数位大于万位时是特殊情况,需要调整大写字母的输出

                 printf("S");

            if(i==6&&chu_2!=0)

                 printf("B");

            if(i==7&&chu_2!=0)

                 printf("Q");        

            if(i==8&&chu_2!=0)

                 printf("Y");

            if(i-1>=0&&chu_2!=0&&i-1<=4)     //数位小于或等于万位时为通常情况,直接按规律输出   

                 switch(i){

                     case 1:printf("S");break;

                     case 2:printf("B");break;

                     case 3:printf("Q");break;

                     case 4:printf("W");break;

            }

            }

            if(yuan==0)    //若币值为零,则直接输出字母a后结束程序

                 printf("a");

        return 0;

    }

     

    2)     设计思路:

    第一步:代码分为输出代表数字的小写字母部分和代表数位的大写字母部分。

    第二步:小写字母部分又分为数字为零的特殊情况和非零的通常情况,大写字母部分又分为数位大于万位的特殊情况和小于等于万位的通常情况。

    第三步通常情况都为直接输出对应的字母,特殊情况按情况讨论。以下为流程图。

     

    3)调试过程中遇到的问题

    关于取出的数字为零时如何调整输出方式:

         当取出零时需要先判断这个零是否需要输出,我们知道,当前一位也为零时,口语上需要将这个零省略。因此我们只需要判断前一位是什么数字就可以确定是否输出这个零。我们可以用数组A记录下之前取出的所有数字,然后根据循环数给每个取出的数字编号,若想知道前一位数是什么,只需要取出数组A中的第i-1个数字即可。

     

    4)解决方法:

    在编译器上面进行编译运行,发现编译错误的地方,其次用调试的方法去寻找答案错误的地方,还要就是去询问同学,上网查找。

    5)错误截图:

  • 相关阅读:
    HTTP长连接、短连接使用及测试
    递归分治算法之二维数组二分查找(Java版本)
    Java二维数组的概念和使用方法
    java二维数组遍历
    HashMap多线程并发问题分析
    Linux 移动或重命名文件/目录-mv 的10个实用例子
    CSS fixed 定位元素失效的问题
    关于 JavaScript 中的继承
    React 虚拟 DOM 的差异检测机制
    下拉框中选项的快速定位
  • 原文地址:https://www.cnblogs.com/lyl68/p/10401001.html
Copyright © 2011-2022 走看看