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;
}