这题真的不难,WA到死,为什么?看最后注释掉的代码就知道了。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <climits>
#include <cstdlib>
#include <cassert>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
using namespace std;
char arr[2117];
char mir[50];
int chartoint(){
if(strcmp(mir, "zero") == 0){
return 0;
}
if(strcmp(mir, "one") == 0){
return 1;
}
if(strcmp(mir, "two") == 0){
return 2;
}
if(strcmp(mir, "three") == 0){
return 3;
}
if(strcmp(mir, "four") == 0){
return 4;
}
if(strcmp(mir, "five") == 0){
return 5;
}
if(strcmp(mir, "six") == 0){
return 6;
}
if(strcmp(mir, "seven") == 0){
return 7;
}
if(strcmp(mir, "eight") == 0){
return 8;
}
if(strcmp(mir, "nine") == 0){
return 9;
}
if(strcmp(mir, "ten") == 0){
return 10;
}
if(strcmp(mir, "eleven") == 0){
return 11;
}
if(strcmp(mir, "twelve") == 0){
return 12;
}
if(strcmp(mir, "thirteen") == 0){
return 13;
}
if(strcmp(mir, "fourteen") == 0){
return 14;
}
if(strcmp(mir, "fifteen") == 0){
return 15;
}
if(strcmp(mir, "sixteen") == 0){
return 16;
}
if(strcmp(mir, "seventeen") == 0){
return 17;
}
if(strcmp(mir, "eighteen") == 0){
return 18;
}
if(strcmp(mir, "nineteen") == 0){
return 19;
}
if(strcmp(mir, "twenty") == 0){
return 20;
}
if(strcmp(mir, "thirty") == 0){
return 30;
}
if(strcmp(mir, "forty") == 0){
return 40;
}
if(strcmp(mir, "fifty") == 0){
return 50;
}
if(strcmp(mir, "sixty") == 0){
return 60;
}
if(strcmp(mir, "seventy") == 0){
return 70;
}
if(strcmp(mir, "eighty") == 0){
return 80;
}
if(strcmp(mir, "ninety") == 0){
return 90;
}
if(strcmp(mir, "hundred") == 0){
return 100;
}
if(strcmp(mir, "thousand") == 0){
return 1000;
}
if(strcmp(mir, "million") == 0){
return 1000000;
}
else{
return -1;
}
}
int main(){
//#ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
//#endif // ONLINE_JUDGE
int t;
int d, w, len, num, n, i, j, k, flag;
int n1, n2, n3;
while(scanf("%d", &t) != EOF){
getchar();
while(t--){
n1 = n2 = n3 = d = w = 0;
memset(arr, 0, sizeof(arr));
gets(arr);
// cout << arr << endl;
i = 0;
len = strlen(arr);
// cout << len << endl;
d = 0;
flag = 0;
n1 = n2 = n3 = 0;
while(i < len){
// printf("%c\n", arr[i]);
k = 0;
if(arr[i] != ' '){
memset(mir, 0, sizeof(mir));
k = 0;
for(j = i; j < len; j++){
if(arr[j] == ' '){
break;
}
else{
mir[k++] = arr[j];
}
}
// puts(mir);
i += (k);
w = chartoint();
if(w == 1000000 || w == 1000){
if(w == 1000000){
n1 = d;
flag = 0;
d = 0;
}
if(w == 1000){
n2 = d;
flag = 0;
d = 0;
}
// cout << n1 << " " << n2 << endl;
i++;
continue;
}
if(w == -1){
flag = 0;
i++;
continue;
}
if(w % 10 == 0){
if(flag == 1){
d *= w;
}
else{
d += w;
}
flag = 0;
i++;
continue;
}
// cout << w << endl;
if(flag == 1){
d *= w;
}
else if(flag == 0){
d += w;
}
flag = 1;
// printf("flag = %d\n", flag);
// cout << d << endl;
}
i++;
}
// cout << d << endl;
n3 = d;
// if(n1 == 0){
// if(n2 == 0){
// printf("%d\n", n3);
// continue;
// }
// else{
// printf("%d,%03d\n", n2, n3);
// continue;
// }
// }
// else{
// printf("%d", n1);
// printf(",");
// printf("%03d", n2);
// printf(",");
// printf("%03d", n3);
// printf("\n");
// }
// getchar();
if(n1 == 0){
if(n2 == 0){
printf("%d\n", n3);
}
else{
printf("%d%03d\n", n2, n3);
}
}
else{
printf("%d%03d%03d\n", n1, n2, n3);
}
}
}
return 0;
}