A + B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12149 Accepted Submission(s): 7099
Problem Description
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
Output
对每个测试用例输出1行,即A+B的值.
Sample Input
one + two = three four + five six = zero seven + eight nine = zero + zero =
Sample Output
3 90 96
/*题解:
代码较长,不过思路很明了,输入整个字符串s,将'+'前的字符串赋值到s1中,'+'后的赋值到s2中。
然后处理s1和s2,首先根据空格的个数以不同形式求出转化后的加数a和b,最后输出a+b。
比赛完看了小郭的代码,更加简洁,用while(scanf("%s",s)&&strcmp(s,"+")!=0)输入数,转换为t后,sum = sum*10+t。
*/
#include<cstdio> #include<cstring> int f(char *s) { if(s[0]=='z') return 0; if(s[0]=='o') return 1; if(s[0]=='t'&&s[1]=='w') return 2; if(s[0]=='t'&&s[1]=='h') return 3; if(s[0]=='f'&&s[1]=='o') return 4; if(s[0]=='f'&&s[1]=='i') return 5; if(s[0]=='s'&&s[1]=='i') return 6; if(s[0]=='s'&&s[1]=='e') return 7; if(s[0]=='e') return 8; if(s[0]=='n') return 9; } int main() { char s[22],s1[22],s2[22],str1[22],str2[22]; int len1,len2,i,j,k,t,a,b,ge,shi,st; while(gets(s)&&strcmp(s,"zero + zero =")!=0) { memset(s1,'\0',sizeof(s1)); memset(s2,'\0',sizeof(s2)); for(i=0; s[i]!='+'; i++) { s1[i] = s[i]; } st = i+2; s1[i-1] = '\0'; int len=strlen(s); for(i=st,j=0; i<len-2; i++) { s2[j++] = s[i]; } s2[j]='\0'; memset(str1,'\0',sizeof(str1)); memset(str2,'\0',sizeof(str2)); len1=strlen(s1),len2=strlen(s2); /**************求'+'前数字和**********************/ t=0; for(i=0; i<len1; i++) { if(s1[i]==' ') t++; } if(t==0) { a = f(s1); } if(t==1) { for(i=0; s1[i]!=' '; i++) { str1[i] = s1[i]; } st = i+1; for(i=st,j=0; i<len1; i++) { str2[j++] = s1[i]; } a = f(str1)*10+f(str2); } /**************求'+'后数字和**********************/ t=0; for(i=0; i<len2; i++) { if(s2[i]==' ') t++; } if(t==0) { b = f(s2); } if(t==1) { for(i=0; s2[i]!=' '; i++) { str1[i] = s2[i]; } str2[i] = '\0'; st = i+1; for(i=st,j=0; i<len2; i++) { str2[j++] = s2[i]; } b = f(str1)*10+f(str2); } printf("%d\n",a+b); } return 0; }
此题用strtok函数会很好解决。