题目的意思是给你一段英文单词表示的数字,让你转化为数字
EX:
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的优先级来进行计算。