• 拼音翻译成阿拉伯数字


    输入一串拼音,输出它代表的阿拉伯数字(Ling,Yi,Er,San,Si,Wu,Liu,Qi,Ba,Jiu),数字不会超过十万

    为了处理方便。输入一定是数字带单位的,比如10会是YiShi,而不是一个单独的Shi.


    输入 JiuWanJiuQianJiuBaiJiuShiJiu
    输出 99999


    基本思路:把Wan,Qian,Bai。Shi特殊处理,作为分隔符,其余的都是普通数字


    #include<stdio.h>
    #include<string>
    #include<cctype>
    #include<map>
    #include<iostream>
    #include<vector>
    using namespace std;
    map<string,int>mm;
    vector<int>vec;
    vector<int>nums;
    void init()
    {
        mm["Ling"]=0;
        mm["Yi"]=1;
        mm["Er"]=2;
        mm["San"]=3;
        mm["Si"]=4;
        mm["Wu"]=5;
        mm["Liu"]=6;
        mm["Qi"]=7;
        mm["Ba"]=8;
        mm["Jiu"]=9;
        mm["Wan"]=10000;
        mm["Qian"]=1000;
        mm["Bai"]=100;
        mm["Shi"]=10;
    }
    int main(int argc, char *argv[])
    {
        freopen("test.in","r",stdin);
        init();
        string s;
        while(cin>>s){
            nums.clear();
            vec.clear();
            int i=0;
            int j;
            while(1){
                if(i<s.size()&&isupper(s[i]))
                {
                    j=i;
                    i++;
                    while(i<s.size()&&islower(s[i]))
                        ++i;
                    string x;
                    for(int k=j;k<i;++k)
                        x+=s[k];
                    vec.push_back(mm[x]);
                }
                if(i==s.size())break;
            }
            int num=0;
            vector<int>::size_type ite=0;
            while(ite!=vec.size()){
                if(vec[ite]>=10){
                    num*=vec[ite];
                    nums.push_back(num);
                    num=0;
                }
                else
                    num+=vec[ite];
                ite++;
            }
            nums.push_back(num);
            int sum=0;
            for(int i=0;i<nums.size();++i)
                sum+=nums[i];
            cout<<sum<<endl;
        }
        return 0;
    }
    
    測试用例:

    BaBaiBaShiBa
    JiuWanJiuQianJiuBaiJiuShiJiu
    YiShi

    结果为:



  • 相关阅读:
    二分查找小结
    FZU みねちゃんの修罗场(从一堆出现三次的数中找出出现两次的数)
    《C陷阱与缺陷》杂记
    HDU 1846 Brave Game(巴什博弈)
    【转载】并查集详解
    第七次作业——学末总结
    STL之vector
    fzuoop期中练习
    MFC 文件对话框
    第六次作业——利用MFC实现计算器图形界面以及简单四则运算表达式批处理
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6814473.html
Copyright © 2020-2023  润新知