The 5th Zhejiang Provincial Collegiate Programming Contest---ProblemG:Give Me the Number

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2971

题意:将输入的英文数字表达转化为阿拉伯数字。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 char aa[30][10]= {"zero", "one","two", "three", "four", "five", "six",  "seven", "eight", "nine",
 5                   "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen","nineteen",
 6                   "twenty","thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
 7                  };
 8 int bb[28]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90};
 9 char cc[300][20];
10 int main() {
11     int t;
12     char s[250];
13     scanf("%d",&t);
14     getchar();//先吃掉t后面的回车
15     while(t--) {
16         memset(s,0,sizeof(s));
17         memset(cc,0,sizeof(cc));
18         gets(s);
19         int num=0,k=0;
20         int len=strlen(s);
21         for(int i=0; i<len; i++) {
22             if(i>=1&&s[i]==' '&&s[i-1]!=' ') {
23                 num++;//在’ ‘前算上一个字符串
24                 k=0;
25                 continue;
26             }
27             if(s[i]!=' ')
28                 cc[num][k++]=s[i];//装入一个字符串
29         }
30         int sum1=0,sum2=0;
31         int j;
        //有前至后读入字符串
32 for(int i=0; i<=num; i++) { 33 for(j=0; j<28; j++) { 34 if(strcmp(cc[i],aa[j])==0) { 35 sum1+=bb[j]; 36 break; 37 } 38 } 39 if(j=28) { 40 if(strcmp(cc[i],"and")==0) 41 continue; 42 if(strcmp(cc[i],"thousand")==0) { 43 sum1*=1000; 44 sum2+=sum1; 45 sum1=0; 46 } else if(strcmp(cc[i],"hundred")==0) 47 sum1*=100; 48 else if(strcmp(cc[i],"million")==0) { 49 sum1*=1000000; 50 sum2+=sum1; 51 sum1=0; 52 } 53 } 54 } 55 printf("%d\n",sum2+sum1); 56 } 57 return 0; 58 }//善于使用strcmp函数,其实想到就很简单了

 

你可能感兴趣的:(The 5th Zhejiang Provincial Collegiate Programming Contest---ProblemG:Give Me the Number)