洛谷 P2108 學英語
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 學英語