您的位置:首页 > 其它

poj 2121 Inglish-Number Translator(模拟)

2013-07-15 17:34 323 查看
题目的意思是给你一段英文单词表示的数字,让你转化为数字

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的优先级来进行计算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: