HDU 1228(字符串处理)
题意是将所给算式求出结果。
用的方法非常麻烦,开始没考虑到零也需要处理,以为遇上零直接跳过即可,知道发现零可以占位,比如 one zero 值为 10 而不是 1……
代码如下:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char s1[10],s2[10]; 6 int a1,a2; 7 while(1) 8 { 9 a1 = a2 = 0; 10 while(scanf("%s",s1) && strcmp(s1,"+")) 11 { 12 if(strcmp(s1,"one")==0) 13 { 14 a1 = a1*10+1; 15 } 16 else if(strcmp(s1,"two")==0) 17 { 18 a1 = a1*10+2; 19 } 20 else if(strcmp(s1,"three")==0) 21 { 22 a1 = a1*10+3; 23 } 24 else if(strcmp(s1,"four")==0) 25 { 26 a1 = a1*10+4; 27 } 28 else if(strcmp(s1,"five")==0) 29 { 30 a1 = a1*10+5; 31 } 32 else if(strcmp(s1,"six")==0) 33 { 34 a1 = a1*10+6; 35 } 36 else if(strcmp(s1,"seven")==0) 37 { 38 a1 = a1*10+7; 39 } 40 else if(strcmp(s1,"eight")==0) 41 { 42 a1 = a1*10+8; 43 } 44 else if(strcmp(s1,"nine")==0) 45 { 46 a1 = a1*10+9; 47 } 48 else{ 49 a1 = a1*10; 50 } 51 } 52 while(scanf("%s",s2) && strcmp(s2,"=")) 53 { 54 if(strcmp(s2,"one")==0) 55 { 56 a2 = a2*10+1; 57 } 58 else if(strcmp(s2,"two")==0) 59 { 60 a2 = a2*10+2; 61 } 62 else if(strcmp(s2,"three")==0) 63 { 64 a2 = a2*10+3; 65 } 66 else if(strcmp(s2,"four")==0) 67 { 68 a2 = a2*10+4; 69 } 70 else if(strcmp(s2,"five")==0) 71 { 72 a2 = a2*10+5; 73 } 74 else if(strcmp(s2,"six")==0) 75 { 76 a2 = a2*10+6; 77 } 78 else if(strcmp(s2,"seven")==0) 79 { 80 a2 = a2*10+7; 81 } 82 else if(strcmp(s2,"eight")==0) 83 { 84 a2 = a2*10+8; 85 } 86 else if(strcmp(s2,"nine")==0) 87 { 88 a2 = a2*10+9; 89 } 90 else 91 { 92 a2 = a2*10; 93 } 94 } 95 if(a1==0 && a2==0) 96 break; 97 // printf("a1:%d a2:%d\n",a1,a2); 98 printf("%d\n",a1+a2); 99 } 100 return 0; 101 }
日后若能有更好的想法,再来完善。
希望看到的大神不吝赐教 orz