杭电acm1228

来源:互联网 发布:六小龄童知乎扒皮 编辑:程序博客网 时间:2024/06/08 07:46

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1228


我的解题思路:
①用一个char数组str1[]存放所有的输入数据。
②将str1[]数组 '+' 前面的字符串存入ch1[]中,后面的字符串存入ch2[]
③分别将ch1[]和ch2[]转换成对应的数字(利用int num(char *ch1,int n)函数转换的时候要判断每个字符串里面是包含一个字符串还是两个字符串)
④求和

源代码:
/*Problem Description读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.Input测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.  Output对每个测试用例输出1行,即A+B的值. Sample Inputone + two =three four + five six =zero seven + eight nine =zero + zero = Sample Output39096 Source浙大计算机研究生复试上机考试-2005年 2014/7/21 星期一*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 25char str[][MAX]={"zero","one","two","three","four","five","six","seven","eight","nine"};int num(char *ch1,int n){int i,j,k;int flag;char c1[MAX],c2[MAX];int a;i=j=k=0;flag=1;c2[0]='\0';for(i=0;i<n;i++){if(ch1[i]!=' '&&flag){c1[j]=ch1[i];j++;}if(!flag){if(i==(n-1)){c2[k]='\0';break;}c2[k]=ch1[i];k++;}else if(' '==ch1[i]){c1[j]='\0';flag=0;//i++;for(k=0;k<10;k++){if(!strcmp(str[k],c1)){a=k;k=0;break;}}}}if(c2[0]!='\0'){a=a*10;for(k=0;k<10;k++){if(!strcmp(str[k],c2)){a=a+k;break;}}}return a;}int main(int argc, char *argv[]){int i;char str1[50];char ch1[MAX],ch2[MAX];int j,k;int flag;int a,b;while(gets(str1)){i=j=k=0;flag=1;memset(ch1,0,MAX);memset(ch2,0,MAX);for(i=0;str1[i]!='=';i++){if(str1[i]!='+'&&flag){ch1[j]=str1[i];j++;}if('+'==str1[i]){ch1[j]='\0';flag=0;i=i+2;}if(!flag){ch2[k]=str1[i];k++;if(str1[i+1]=='='){ch2[k]='\0';}}}a=num(ch1,j);b=num(ch2,k);if(0==a&&0==b){break;}printf("%d\n",a+b);}return 0;}


0 0