寒假作业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>
int main()
{
    int money,i,j;      
    char figure[10]={'a','b','c','d','e','f','g','h','i','j'};//定义字符,输入a-j
    int space[10]={};
    scanf("%d",&money);
    if(money==0)   //判断为0的情况
    printf("a");
    else
    {
        for(i=1;money>0;i++)
    {
         space[i]=money%10;  //求各个位数上的数字
         money=money/10;
        }
        i=i-1;     
        for(j=i;j>0;j--)   
       {
         if(space[j]==0)
         {
          if(space[j-1]!=0)
          printf("a");
         } 
         else
         printf("%c",figure[space[j]]);     //以字母来输出各个位数上的数字                       
         if(j==5&&(space[8]!=0||space[7]!=0||space[6]!=0||space[5]!=0))//超过万位且不为0
         printf("W");
         if(space[j]!=0)
         {
          if(j==2||j==6)  //在各个位数上添加单位
          printf("S");
          if(j==3||j==7)
          printf("B");
          if(j==4||j==8)
          printf("Q");
          if(j==9)
          printf("Y");
         }
       }
    }
    
    return 0;
 } 

2.设计思路:

流程图:

首先,将需要的数字每一个位的数都分离出来并且储存至数组中,

然后写一个数组,其中每一个元素与字母位置对应,

然后把对应的数字转化为对应的字母。

由于0在里面的情况比较特殊,所以单独考虑什么时候该打印0。

在实现了所有数字的转化后,开始考虑对应的单位应该在什么时候加入。

通过循环语句一个一个把数组中的字母打出来。
注意事项:
本题在101这个数字的输出值尤其要考究,对于10000的输出,以及再未达到万位的数字输出也是考量的目标,且需要加入对数位的判断

3.本题调试过程碰到问题及解决办法:

问题1:开始忘记考虑money等于0的情况
解决办法:添加 if(money==0)
问题2:在i多加了一次后没有减一
解决办法:添加i=i-1

4.实验结果截图:

原文地址:https://www.cnblogs.com/lyx1314/p/10325117.html