<pre name="code" class="cpp">#include <iostream> #include <algorithm> #include <string> #include <cstdlib> #include <map> using namespace std; char ary[11][10]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"}; void main() { int i,a,b,j,k,sum; string s1,s2; map<string,int> mp; for(i = 0;i< 11;i++) mp[ary[i]] = i; while(1) { sum = 0; while(cin>>s1,s1 != "+") { sum = sum*10 + mp[s1]; } a = sum; sum = 0; while(cin>>s2,s2 != "=") { sum = sum*10 + mp[s2]; } b = sum; if(a == 0 && b == 0) break; cout<<a+b<<endl; } }
#include <stdio.h> //代码二 #include <string.h> char week[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; //二维,一维就超过了字节 int sear(char num[]) { int i; for (i=0;i<=9;i++) { if(!strcmp(num,week[i])) break; } return i; } int main() //字符串的存入不包括空格 { int i,a,b; char num[10]; while (1) { a=0; while (scanf("%s",num) && strcmp(num,"+")) { a=a*10+sear(num); } b=0; while (scanf("%s",num) && strcmp(num,"=")) { b=b*10+sear(num); } if(a==0 && b==0) return 0; else printf("%d\n",a+b); } return 0; }
hash做法
#include <stdio.h> #include <string.h> #define max 10000 char week[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; //二维,一维就超过了字节 int hash[15]; // BKDR Hash Function unsigned int BHash(char* str) { unsigned int seed = 31 ; // 31 131 1313 13131 131313 etc.. unsigned int hash = 0 ; while (*str) { hash = hash*seed + (*str ++ ); } return (hash & 0x7FFFFFFF ); } int main() //字符串的存入不包括空格 { int i,a,b,k; char num[10]; for (i=0;i<10;i++) { k=BHash(week[i])%max; //max要大,不然会冲突 hash[k]=i; } while (1) { a=0; while (scanf("%s",num) && strcmp(num,"+")) { k=BHash(num)%max; a=a*10+hash[k]; } b=0; while (scanf("%s",num) && strcmp(num,"=")) { k=BHash(num)%max; b=b*10+hash[k]; } if(a==0 && b==0) return 0; else printf("%d\n",a+b); } return 0; }