poj 2121 Inglish-Number Translator(模拟)

题目的意思是给你一段英文单词表示的数字,让你转化为数字
EX:
Sample Input

six
negative seven hundred twenty nine
one million one hundred one
eight hundred fourteen thousand twenty two

Sample Output

6
-729
1000101
814022



#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int judge(char data[]);
    char data[200];
    int sum;
    char divided[100][20];
    int shuzi[100];
    int cnt[100],flag;
    while(gets(data) != NULL)/*字符串信息的读入*/
    {
        int temp = 0;
        memset(cnt,0,sizeof(cnt));
        flag = 0;
        sum = 0;
        int k = 0,j = 0,i,key;
        for( i = 0 ; i < strlen(data) ; i++)/*将整串按照空格进行“分割”*/
        {
            if(data[i] == ' ')
            {
                divided[j][k]= '\0';
                j++;
                k = 0;
            }
            else
            {
                divided[j][k] = data[i];
                k++;
            }
        }
        divided[j][k] = '\0';
        for( i = 0 ; i <= j ; i++)  /*将分割后的单词转化为对应的数字*/
        {
            shuzi[i] = judge(divided[i]);
        }
        if(judge(divided[0]) == -1) /*负数处理*/
        {
            key = 1;
        }
        else
        {
            key = 0;
        }
        for( i = key ; i <= j ; i++)/*对所有数进行扫描处理,用到中间变量temp暂时存储*/
        {
            if(shuzi[i] < 100)
            {
                temp+=shuzi[i];
            }
            else if(shuzi[i] == 100)
            {
                temp*=100;
            }
            else
            {
                temp*=shuzi[i];
                sum+=temp;
                temp = 0;
            }
        }
        sum+=temp;
        if(key == 1)
        {
            sum = sum*-1;
        }
        if(strlen(data) >= 3)/*如果输入的是空串,不做输出.*/
        {
           cout<<sum<<endl;
        }
    }
    return 0;
}
int judge(char data[])/*转化函数*/
{
    if(!strcmp(data,"negative"))
    {
        return -1;
    }
    else if(!strcmp(data,"zero"))
    {
        return 0;
    }
    else if(!strcmp(data,"one"))
    {
        return 1;
    }
    else if(!strcmp(data,"two"))
    {
        return 2;
    }
    else if(!strcmp(data,"three"))
    {
        return 3;
    }
    else if(!strcmp(data,"four"))
    {
        return 4;
    }
    else if(!strcmp(data,"five"))
    {
        return 5;
    }
    else if(!strcmp(data,"six"))
    {
        return 6;
    }
    else if(!strcmp(data,"seven"))
    {
        return 7;
    }
    else if(!strcmp(data,"eight"))
    {
        return 8;
    }
    else if(!strcmp(data,"nine"))
    {
        return 9;
    }
    else if(!strcmp(data,"ten"))
    {
        return 10;
    }
    else if(!strcmp(data,"eleven"))
    {
         return 11;
    }
    else if(!strcmp(data,"twelve"))
    {
        return 12;
    }
    else if(!strcmp(data,"thirteen"))
    {
        return 13;
    }
    else if(!strcmp(data,"fourteen"))
    {
        return 14;
    }
    else if(!strcmp(data,"fifteen"))
    {
        return 15;
    }
    else if(!strcmp(data,"sixteen"))
    {
        return 16;
    }
    else if(!strcmp(data,"seventeen"))
    {
        return 17;
    }
    else if(!strcmp(data,"eighteen"))
    {
        return 18;
    }
    else if(!strcmp(data,"nineteen"))
    {
        return 19;
    }
    else if(!strcmp(data,"twenty"))
    {
        return 20;
    }
    else if(!strcmp(data,"thirty"))
    {
        return 30;
    }
    else if(!strcmp(data,"forty"))
    {
        return 40;
    }
    else if(!strcmp(data,"fifty"))
    {
        return 50;
    }
    else if(!strcmp(data,"sixty"))
    {
        return 60;
    }
    else if(!strcmp(data,"seventy"))
    {
        return 70;
    }
    else if(!strcmp(data,"eighty"))
    {
        return 80;
    }
    else if(!strcmp(data,"ninety"))
    {
        return 90;
    }
    else if(!strcmp(data,"hundred"))
    {
        return 100;
    }
    else if(!strcmp(data,"thousand"))
    {
        return 1000;
    }
    else if(!strcmp(data,"million"))
    {
        return 1000000;
    }
}

 
/*对于数据 (one thousand one million),按照优先级来应该是1000000000,但是程序跑的结果是1001000,应该是数据弱了的结果*/
pass:正确的做法应该是按照栈的算式应用,根据 hundred,thousand,milloin的优先级来进行计算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值