1. 程式人生 > >洛谷 P2108 學英語

洛谷 P2108 學英語

題目 else cstring 但是 pre -o 大學 one 時空

P2108 學英語

題目描述

為了適應緊張的大學學習生活,小Z發憤圖強開始復習鞏固英語。

由於小Z對數學比較有好感,他首先復習了數詞。小Z花了一整天的時間,終於把關於基數詞的知識都搞懂了。於是小Z非常興奮,決定出一些題目考考已經過了英語四級、人稱英語帝的小 G。考法很簡單:小Z給出某個整數 x 的英文寫法,要求小D用阿拉伯數字寫出x。

小Z會保證以下幾點:

1、-999,999,999 ≤ x ≤ 999,999,999

2、題目中只會用到以下這些英文單詞:

negative, zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen,

fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, thirty, forty, fifty, sixty, seventy,

eighty, ninety, hundred, thousand, million

3、若 x 為負數,題目中第一個單詞是 negative,否則任何時候都不會出現 negative 這個詞。

4、由於小Z很牛 B,他不知道像 103 這樣的數字要寫成 one hundred and three 而是直接寫成了 one hundred three,就是說小Z的所有題目中都沒有寫 and 這個詞(盡管本應該是要寫的),請你諒解。

5、除了第 4 點, 其他還是基本符合英語的語法規則的, 比如 1500 他會寫成 one thousand five hundred 而不會寫成 fifteen hundred。

小D拿到題目後不屑地說了一句:水題!寫個程序麽好了……

但是小D要出去玩(此時應該已經在千裏之外爽玩了) ,這個任務就交給你了。

輸入輸出格式

輸入格式:

一行,題目描述中所說的 x 的英文寫法。

輸出格式:

一行, x 的阿拉伯數字寫法。

輸入輸出樣例

輸入樣例#1: 復制
six
輸出樣例#1: 復制
6
輸入樣例#2: 復制
negative seven hundred twenty nine
輸出樣例#2: 復制
-729
輸入樣例#3: 復制
one million one hundred one
輸出樣例#3: 復制
1000101
輸入樣例#4: 復制
eight hundred fourteen thousand twenty two
輸出樣例#4: 復制
814022

說明

【數據規模】

對於100%的數據,-999,999,999 ≤ x ≤ 999,999,999

【時空限制】

0.1s/16M

思路:模擬。

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<string,string>ma;
string x;
int tot,maxn;
long long ans;
int num[100000];
void pre(){
    ma["negative"]="-";ma["zero"]="0";ma["one"]="1";ma["two"]="2";ma["three"]="3";
    ma["four"]="4";ma["five"]="5";ma["six"]="6";ma["seven"]="7";ma["eight"]="8";
    ma["nine"]="9";ma["ten"]="10";ma["eleven"]="11";ma["twelve"]="12";ma["thirteen"]="13";
    ma["fourteen"]="14";ma["fifteen"]="15";ma["sixteen"]="16";ma["seventeen"]="17";
    ma["eighteen"]="18";ma["nineteen"]="19";ma["twenty"]="20";ma["thirty"]="30";
    ma["forty"]="40";ma["fifty"]="50";ma["sixty"]="60";ma["seventy"]="70";ma["eighty"]="80";
    ma["ninety"]="90";ma["hundred"]="100";ma["thousand"]="1000";ma["million"]="1000000";
}
int main(){
    pre();
    while(cin>>x){
        x=ma[x];
        if(x[0]==-){ cout<<x[0];x.clear();continue; }
        int le=x.length(),sum=0;
        for(int j=0;j<le;j++){
            sum+=x[j]-0;
            sum*=10;
        }
        sum/=10;
        x.clear();
        num[++tot]=sum;
    }
    for(int i=1;i<=tot;i++){
        if(num[i]<100)    maxn+=num[i];
        else if(num[i]==100)    maxn*=num[i];
        else if(num[i]==1000){
            ans+=maxn*1000;
            maxn=0;
        }
        else if(num[i]==1000000){
            ans+=maxn*1000000;
            maxn=0;
        }
    }
    cout<<ans+maxn;
}

洛谷 P2108 學英語