美文网首页
ZOJ - 2971 G - Give Me the Numb

ZOJ - 2971 G - Give Me the Numb

作者: 陌路晨曦 | 来源:发表于2017-03-29 15:09 被阅读0次

说起这道题,我其实是很气的,个人赛最后两个小时我一道题都没做出来,这道题其实很好做,做的时候总怕有什么坑,但其实差不多思路理顺写下来就行了。还是怪自己代码力弱,前面的卡了一下,做的时候就不是很顺,这道题和k题不是很敢下手,但其实都是能做的。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<map>
#include<iostream>
using namespace std;
map<string,int> mp;

int main()
{
    int t;
    
    mp.clear();
    mp["one"] = 1;
    mp["two"] = 2;
    mp["three"] = 3;
    mp["four"] = 4;
    mp["five"] = 5;
    mp["six"] = 6;
    mp["seven"] = 7;
    mp["eight"] = 8;
    mp["nine"] = 9;
    mp["ten"] = 10;
    mp["eleven"] = 11; 
    mp["twelve"] =12;
    mp["thirteen"] =13;
    mp["fourteen"] =14;
    mp["fifteen"] =15;
    mp["sixteen"] =16;
    mp["seventeen"] =17;
    mp["eighteen" ] =18;
    mp["nineteen"] = 19;
    mp["twenty"] = 20;
    mp["thirty"] = 30;
    mp["forty"] = 40;
    mp["fifty"] = 50;
    mp["sixty"] = 60;
    mp["seventy"] = 70;
    mp["eighty"] = 80;
    mp["ninety"] = 90;
    scanf("%d",&t);
    while(t--)
    {
        string tmp;
        char c =' ';
        int ans = 0,x=0;
        while(c!='\n')
        {
            cin>>tmp;
            c = getchar();
            if(tmp == "million")
            {
                ans+=x*1000000;
                x =0;
            }
            else if(tmp == "thousand")
            {
                ans += x*1000;
                x =0;
            }
            else if(tmp == "hundred")
            {
                x*=100;
            }
            else if(tmp == "and")
            {
                continue;
            }
            else
            {
                x +=mp[tmp];
                //printf("***%d***\n",x);
            }
            
            //cout<<tmp<<endl;
        }
        ans +=x;
        printf("%d\n",ans);
    }
}

这段代码有几个很妙的处理技巧,1: 输入时候可以不用gets()读取包括空格在内的字符,可以通过巧用getchar()吸收scanf缓冲区的字符来判断输入是否结束,当然有一点很重要char c = ‘ ’,要初始化为一个空格,不然char型默认用0填充,根本进入不了循环。2 : 还有就是巧用map来实现字符的转换。
我承认在字符串处理这块我还是很弱的啊,做的题少,接触的少,很多技巧思路,比赛的时候一时半会想不到;

相关文章

网友评论

      本文标题:ZOJ - 2971 G - Give Me the Numb

      本文链接:https://www.haomeiwen.com/subject/wyieottx.html