Problem Description
读入两个小于100的正整数A和B,计算A+B,需要注意的是:A和B的每一位数字由对应的英文单词给出
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A
+ B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
Output
对每个测试用例输出1行,即A+B的值.
这题没有什么算法,纯粹是字符串的操作。
总体而言本题有两类做法:1、用scanf读取,因为每个字符后面都有空格,读取完每组字符串后判断此字符串的含义。2、gets一次读取一整行,直接判断至结尾。
其实这题用scanf更容易些,不过一开始想复杂了用了gets,代码如下:
#include<stdio.h> #include <string.h> int n10(int n,int len) { int i; for(i=1;i<len;i++) { n=n*10; } return n; } int main() { char a[10000],temp[10]; char *num[10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; while(gets(a)) { int i,n=1,j=0,m,word1=0,word2=0,num1[100],num2[100],len1=0,len2=0; for(i=0;a[i]!='+';i++) { if(a[i]!=' ') { temp[j]=a[i]; j++; } else { temp[j]='\0'; for(m=0;m<10;m++) if(!strcmp(temp,num[m])) { num1[len1]=m; len1++; j=0; break; } } } for(m=0;m<len1;m++) { word1=word1+n10(num1[m],len1-m); } i=i+2; j=0; for(;a[i]!='=';i++) { if(a[i]!=' ') { temp[j]=a[i]; j++; } else { temp[j]='\0'; for(m=0;m<10;m++) if(!strcmp(temp,num[m])) { num2[len2]=m; len2++; j=0; break; } } } for(m=0;m<len2;m++) { word2=word2+n10(num2[m],len2-m); } if(word1==0&&word2==0)return 0; else printf("%d\n",word1+word2); } return 0; }