zoukankan      html  css  js  c++  java
  • 寒假作业2编辑总结

    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
     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,n,m=1,p=1,z=0,item;
     5     char a[10] = {'a','b','c','d','e','f','g','h','i','j'}; /*定义两个数组储存字母*/
     6     char b[8] = {'S','B','Q','W','S','B','Q','Y'};
     7     scanf("%d",&n);
     8     item=n;
     9     while(item/10>0){  /*这里是为了判断N是几位数*/
    10         item=item/10;
    11         m++;
    12         p=p*10;
    13     }
    14     if(m==1||n==0){  /*如果是1位数则直接输出并结束程序*/
    15         printf("%c",a[n]);
    16         return 0;
    17     }
    18     if(n%10==0){  /*判断N是不是以0结尾的,如6900*/
    19         while(n%10==0){  /*去掉后面的0*/
    20             n=n/10;
    21             p=p/10;
    22             z++;
    23         }
    24         for(i=(m-z);i>0;i--){  /*(m-z)是减少循环输出的次数,后面有几个0就减少几次*/
    25             printf("%c",a[n/p]);  /*通过取整,输出N最前面的那一位数字*/
    26             if(m-2>=0&&n/p!=0)  /*(m-2)是判断还符不符合继续输出位数,(n/p!=0)是为了防止N中间有0的情况*/
    27                 printf("%c",b[m-2]);  /*这里为什么是(m-2)和我定义的b数组有关*/
    28             m--;        
    29             if(n/p==0){  /*整个if语句都是去掉N中间的0*/
    30                 p=p/10;
    31                 while(n/p==0){
    32                     p=p/10;
    33                     m--;i--;
    34             }
    35                 continue;
    36             }
    37             n=n%p;  /*取整准备下一次的循环*/
    38             p=p/10;
    39             if(i==4&&n/p==0)  /*这里如果N是大于10万的数就必须当i等于4的时候多输出一个W*/
    40                 printf("%c",b[3]);
    41         }
    42     }
    43     else{  /*后面这里就和上面的差不多,因为不是0结尾的就改了一些数据的行了*/
    44         for(i=m;i>0;i--){
    45             printf("%c",a[n/p]);
    46             if(i-2>=0&&n/p!=0)
    47                 printf("%c",b[i-2]);
    48             if(n/p==0){
    49                 p=p/10;
    50                 while(n/p==0){
    51                     p=p/10;
    52                     i--;
    53                 }
    54                 continue;
    55             }
    56             n=n%p;
    57             p=p/10;
    58             if(i==6&&n/p==0)
    59                 printf("%c",b[3]);
    60     }
    61 }
    62     return 0;
    63  }
    设计思路

    作业过程中遇到的问题与解决办法


    最小个位数运行超时的问题,我是把当N为个位数时,单独拿出来了,如14-17行,中间连续多0的问题,我通过调试发现是在循环去0的过程中,一个重要的计数变量m没有随之减小,所以我在33行加了一个m--。
    运行结果截图

  • 相关阅读:
    POJ1741 Tree(树分治)
    codeforces713D Animals and Puzzle(二维倍增)
    codeforces713C Sonya and Problem Wihtout a Legend(dp)
    codeforces724E Goods transportation(最小割——dp)
    codeforces710E Generate a String(dp)
    codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) 题解(A-D)
    BNUOJ52317 As Easy As Possible(树上倍增)
    hihocoder1386 Pick Your Players(dp)
    常用函数
    vector总结(更新中。。。)
  • 原文地址:https://www.cnblogs.com/pzbangbangdai/p/10370558.html
Copyright © 2011-2022 走看看