码迷,mamicode.com
首页 > 其他好文 > 详细

循环-19. 币值转换

时间:2015-01-26 22:38:52      阅读:624      评论:0      收藏:0      [点我收藏+]

标签:

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

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB


代码太乱,逻辑也乱,有几个要点
一是数组右移
二是全0
三是多个连续的0只输出一个零
四是万如果为0,要特别的打出一个W

#include <iostream>
#include <stdio.h>
#include <math.h>
#include<string>

int main(){
    char shuzi[10];//数字转换字母的数组 
    for(int i=0;i<10;i++)
    {
        shuzi[i]=97+i;
    //    printf("%c",shuzi[i]);
    } 
    
    char danwei[9];//将单位转换
    danwei[0]=Y;
    danwei[1]=danwei[5]=Q;
    danwei[2]=danwei[6]=B;
    danwei[3]=danwei[7]=S;
    danwei[4]=W;
    danwei[8]=A; 
    
    
    int num[9]={0};//num完成了对数组的右移,1234转变为000001234

    //利用栈接受数字
    int stack[9];
    for(int i=0;i<=8;i++)
    {
        stack[i]=88;
    }
    int i=0;
    char c;
    //进栈 
    while((c=getchar())!=\n)
    {
        stack[i++]=c-0;
    //    printf("%d",stack[i-1]);
    } 
    //出栈 
    i=8;
    int j=8;//num数组的指示 
    int status=0;//检测是否有非88的数,如果有就开始出栈 
    while(i>=0)
    {
        if(status==0&&stack[i]!=88)
        {
            status=1;
        } 
        if(status==1)
        {
            num[j]=stack[i];
            j--;
        }
        i--;
    
    } 

    
    
    //准备输出,对0要特殊处理,1001为一千零一,1100为一千一百 ,1000100为一百万零一百 

    for(j=0;j<=8;j++)
    {
        if(num[j]!=0)break;
    }
    if(j>8)
    {
        printf("a");
        return 0;
    }
    
    int print_state=0;
    i=0;
    while(i<=8)
    {
        if(print_state==0&&num[i]!=0)
        {
            print_state=1;
        }
        if(print_state)
        {
            if(num[i]!=0)
            {
                
                if(i!=8)
                    printf("%c%c",shuzi[num[i]],danwei[i]);
                    else
                    printf("%c",shuzi[num[i]]);
            }else
            {
                while(num[i]==0&&i<=8)
                {
                if(i==4) printf("W"); 
                i++;} 
                
                if(i<=8)
                {
                    printf("a");
                    i--;
                }
                else
                {
                    return 0;
                }
            }
        }
        i++;
    }
    
    
     
    return 0;
}

 



循环-19. 币值转换

标签:

原文地址:http://www.cnblogs.com/ligen/p/4251424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!