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


posted @ 2014-11-23 19:03  NYNU_ACM  阅读(152)  评论(0编辑  收藏  举报