zoukankan      html  css  js  c++  java
  • 1082. Read Number in Chinese (25)-字符串处理

    题意就是给出9位以内的数字,按照汉子的读法读出来。

    读法请看下方的几个例子:

    5 0505 0505 伍亿零伍佰零伍万零伍佰零伍

    5 5050 5050 伍亿伍仟零伍拾万伍仟零伍拾  (原本我以为这个是读:伍亿伍仟零伍拾万"零"伍仟零伍拾)

    5 0550 0055 伍亿零伍佰伍拾万零伍拾伍

    5 5005 5500 伍亿伍仟零伍万伍仟伍佰

    5 5500 0055 伍亿伍仟伍

    按四位四位的分开处理,具体见代码~

    #include <iostream>
    #include <cstdio>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    char number[15];
    bool first=true;
    char str1[3][10]={"Fu","Yi","Wan"};
    char str2[4][10]={"","Shi","Bai","Qian"};
    char digit[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    
    /*
    cnt表示该位的右边还剩下left-1位(包括该位)
    read是4位4位的读
    */
    void read(int idx,int left){
        if(left==0)
            return;
        if(number[idx]=='0'){
            bool allZero=true; //判断接下来的是否都是0,若都是就不需要读ling
            int cnt=0;
            for(int i=idx;i<idx+left;i++){
                if(number[i]!='0'){
                    allZero=false;
                    break;
                }
                else
                    cnt++;
            }
            if(!allZero){
                printf(" ling");
                read(idx+cnt,left-cnt);
            }
        }
        else{
            if(!first)
                printf(" ");
            else
                first=false;
            printf("%s",digit[number[idx]-'0']);
            if(left>1)
                printf(" %s",str2[left-1]);
            read(idx+1,left-1);
        }
    }
    int main()
    {
        first=true;
        scanf("%s",number);
        int len=strlen(number);
        int left=len;
        int idx=0;
        int a=atoi(number);
        //注意0这个特例!!!,没有考虑这个导致WA
        if(a==0){
            printf("ling");
            return 0;
        }
        if(number[0]=='-'){
            first=false;
            printf("Fu");
            left--;
            idx++;
        }
        if(left>=9){
            if(!first){
                printf(" ");
            }
            else
                first=false;
            printf("%s",digit[number[idx]-'0']);
            printf(" Yi");
            left--;
            idx++;
        }
        //万位上的四位
        if(5<=left && left<=8){
            read(idx,left-4);
            idx+=left-4;
            left=4;
            printf(" Wan");
        }
        //低位上的四位
        if(1<=left<=4){
            read(idx,left);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    MFC CDialog/CDialogEx DoModal ALT
    yum和apt-get用法及区别
    ubuntu 12.04 source.list 源更新
    elasticsearch 优化
    TRIE树
    数据统计经验浅谈
    机器学习
    python 读取libsvm文件
    spark 参数调优
    python中的一些函数
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6390129.html
Copyright © 2011-2022 走看看