A + B
Description
读入两个小于10000的正整数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
HINT
//自己的方法并不是特别简单但是易懂
#include<stdio.h> #include<string.h> int main() { int i,j; int x,y,m,n,t; char a[1000],b[1000],c[100][100],d[100][100],str[10000]; while(gets(str)) { t=0; for(i=0;str[i];i++) { if(str[i]=='+') { a[t-1]='\0';//因为“+”前有一个空格 break; } else a[t++]=str[i]; } a[t]='\0'; t=0; for(j=i+2;str[j];j++)//(j=i+2)因为“+”后有一个空格 { if(str[j]=='=') { b[t-1]='\0';//因为“=”前有一个空格 break; } else b[t++]=str[j]; } b[t]='\0'; if(strcmp(a,"zero")==0&&strcmp(b,"zero")==0) break; //printf("%s\n",a); // printf("%s\n",b); m=0; n=0; for(i=0;a[i];i++) { if(a[i]==' ') { d[m][n++]='\0'; m++; n=0; } else d[m][n++]=a[i]; } d[m++][n]='\0'; x=0; for(i=0;i<m;i++) { if(strcmp(d[i],"one")==0) { j=1; x=x*10+j; } else if(strcmp(d[i],"two")==0) { j=2; x=x*10+j; } else if(strcmp(d[i],"three")==0) { j=3; x=x*10+j; } else if(strcmp(d[i],"four")==0) { j=4; x=x*10+j; } else if(strcmp(d[i],"five")==0) { j=5; x=x*10+j; } else if(strcmp(d[i],"six")==0) { j=6; x=x*10+j; } else if(strcmp(d[i],"seven")==0) { j=7; x=x*10+j; } else if(strcmp(d[i],"eight")==0) { j=8; x=x*10+j; } else if(strcmp(d[i],"nine")==0) { j=9; x=x*10+j; } else if(strcmp(d[i],"zero")==0) { j=0; x=x*10+j; } } m=0; n=0; for(i=0;b[i];i++) { if(b[i]==' ') { c[m][n++]='\0'; m++; n=0; } else c[m][n++]=b[i]; } c[m++][n]='\0'; y=0; for(i=0;i<m;i++) { if(strcmp(c[i],"one")==0) { j=1; y=y*10+j; } else if(strcmp(c[i],"two")==0) { j=2; y=y*10+j; } else if(strcmp(c[i],"three")==0) { j=3; y=y*10+j; } else if(strcmp(c[i],"four")==0) { j=4; y=y*10+j; } else if(strcmp(c[i],"five")==0) { j=5; y=y*10+j; } else if(strcmp(c[i],"six")==0) { j=6; y=y*10+j; } else if(strcmp(c[i],"seven")==0) { j=7; y=y*10+j; } else if(strcmp(c[i],"eight")==0) { j=8; y=y*10+j; } else if(strcmp(c[i],"nine")==0) { j=9; y=y*10+j; } else if(strcmp(c[i],"zero")==0) { j=0; y=y*10+j; } } printf("%d\n",x+y); } return 0; }
//学习其他的方法
#include <iostream> #include <string> #include <string.h> #include <stdio.h> using namespace std; int digital(string str) { if(str == "one") return 1 ; else if(str == "two") return 2 ; else if(str == "three") return 3 ; else if(str == "four") return 4 ; else if(str == "five") return 5 ; else if(str == "six") return 6 ; else if(str == "seven") return 7 ; else if(str == "eight") return 8 ; else if(str == "nine") return 9 ; return 0 ; } int main() { char s[1000] ; while(gets(s)) { string str[100] ;//字符串数组 char *p = NULL ;//p初始值定为空 int count = 0 ; for(p = strtok(s," ") ; p ; p = strtok(NULL," "))//p = strtok(s," ")将其按碰到第一个空格时拆分,p = strtok(NULL," ")将剩余的后面一部分(NULL)按空格分,直到p为空时 str[count++] = p ; int a = 0 , b = 0 ; int i = 0 ; for( ; str[i] != "+" ; i++) //“+”之前为A { int di = digital(str[i]) ; a = a * 10 ; a = a + di ; } for( ; str[i] != "=" ; i++)//"+"之后“=”之前为B { int di = digital(str[i]) ; b = b * 10 ; b = b + di ; } if(a+b == 0) return 0 ; cout << a + b << endl ; } return 0; }