汉字数字转阿拉伯数字

http://acm.hi-54.com/problem.php?pid=2116

题意:

汉字数字转阿拉伯数字

思路:

因为汉字的数字大部分是数字后面有个单位(万和十要特判),所以可以根据这个来做

#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
#include <math.h>
#include <vector>
#include <map>
#include <stdio.h>
#define ll long long
using namespace std;
map<string, int> msz;
map<string, int> mdw;
double getmoney(string ss) {
    double money = 0;
    double temp = 0;
    string tt = "";
    int vis = 1;
    for (int i =0; i < (int)ss.length() - 4; i ++) {
        string te = "";
        te += ss[i] ;
        te += ss[i + 1] ;
        te += ss[i + 2] ;
        te += ss[i + 3] ;
        if (te == "ling") {
            ss.erase(i, 4);
        }
    }
    for(int i = 0; i < (int)ss.length(); i ++) {
        tt += ss[i];
        if(tt == "wan") {
            money += temp;
            money *= 10000;
            temp = 0;
            vis = 1;
            tt = "";
        }//如果出现了yibaiwan这种情况要这样处理
        else if (money == 0 && tt == "shi") {
            money = 10;
            vis = 1;
            tt = "";
            temp = 0;
        }//以shi开头的数字
        if (vis & 1) {
            int k = msz[tt];
            if (k) {
                vis = 0;
                tt = "";
                temp += k;
            }
        }else {
            int k = mdw[tt];
            if (k) {
                vis = 1;
                tt = "";
                temp *= k;
                money += temp;
                temp = 0;
            }
        }
    }
    money += temp;
    return money;
}
double getze(string ss) {
    double res = 0.;
    double kk = 0.1;
    string st = "";
    for (int i = 0; i < (int)ss.length(); i ++) {
        st += ss[i];
        int k = msz[st];
        if(k || st == "ling") {
            res += kk * k;
            kk *= 0.1;
            st = "";
        }
    }
    return res;
}
int main() {
    msz["ling"] = 0;
    msz["yi"] = 1;
    msz["er"] = 2;
    msz["san"] = 3;
    msz["si"] = 4;
    msz["wu"] = 5;
    msz["liu"] = 6;
    msz["qi"] = 7;
    msz["ba"] = 8;
    msz["jiu"] = 9;//数值
    mdw["bai"] = 100;
    mdw["qian"]  = 1000;
    mdw["shi"] = 10;
    mdw["wan"] = 10000;//单位
    string a, b, c;
    while(cin >> a >> b >> c) {
        int vis = 0;
        if(a == "yuanjia")
            vis = 1;
        double money = getmoney(b);
        double zejou = getze(c);
        double kmoney;
        if(vis) {
            kmoney = money * zejou;
            printf("%.2lf %.2lf\n", money, kmoney);
        }
        else if(!vis) {
            kmoney = money / zejou;
            printf("%.2lf %.2lf\n", kmoney, money);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/henu_jizhideqingwa/article/details/81191459