UVA486 题解

· · 题解

题目传送门

思路

一道小模拟,但是有一些细节。

对于每一组测试,用 getline 读入一行字符串,然后拆成单词。我们设临时变量为 T,答案总和为 S

最后一次更新的 T 并不会加在 S 中,所以要输出 F\times(N+T)

注意事项

AC CODE

#include<bits/stdc++.h>
using namespace std;
int calc(string s){
    if(s=="negative")
        return -1;
    else if(s=="one")
        return 1;
    else if(s=="two")
        return 2;
    else if(s=="three")
        return 3;
    else if(s=="four")
        return 4;
    else if(s=="five")
        return 5;
    else if(s=="six")
        return 6;
    else if(s=="seven")
        return 7;
    else if(s=="eight")
        return 8;
    else if(s=="nine")
        return 9;
    else if(s=="ten")
        return 10;
    else if(s=="eleven")
        return 11;
    else if(s=="twelve")
        return 12;
    else if(s=="thirteen")
        return 13;
    else if(s=="fourteen")
        return 14;
    else if(s=="fifteen")
        return 15;
    else if(s=="sixteen")
        return 16;
    else if(s=="seventeen")
        return 17;
    else if(s=="eighteen")
        return 18;
    else if(s=="nineteen")
        return 19;
    else if(s=="twenty")
        return 20;
    else if(s=="thirty")
        return 30;
    else if(s=="forty")
        return 40;
    else if(s=="fifty")
        return 50;
    else if(s=="sixty")
        return 60;
    else if(s=="seventy")
        return 70;
    else if(s=="eighty")
        return 80;
    else if(s=="ninety")
        return 90;
    else if(s=="hundred")
        return 100;
    else if(s=="thousand")
        return 1000;
    else if(s=="million")
        return 1000000;
    return 0;
}
int main(){
    string s;
    while(getline(cin,s)){
        int l=0,ans=0,f=1;
        for(int i=0;i<s.size();++i)
            if(s[i]==' ')
                ++i;
            else{
                string t="";
                while(s[i]!=' '&&i<s.size())
                    t+=s[i++];
                int num=calc(t);
                if(num==-1)
                    f=-1;
                else if(num==100)
                    l*=100;
                else if(num==1000||num==1000000)
                    ans+=l*num,l=0;
                else l+=num;
            }
        cout<<f*(ans+l)<<"\n";
    }
    return 0;
}