hdu1228——A+B

1905 단어 블 로그HDU
A + B
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14346    Accepted Submission(s): 8511
Problem Description
100 보다 작은 정수 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

물 문제 하나,맵 에 대응 치 를 저장 하면 됩 니 다!
#include<iostream>
#include<map>
using namespace std;
int add(string a,string b)
{
	map<string,int> num;
	num["one"]=1;num["two"]=2;
	num["three"]=3;num["four"]=4;
	num["five"]=5;num["six"]=6;
	num["seven"]=7;num["eight"]=8;
	num["nine"]=9;num["zero"]=0;
	int i,m=0,n=0;
	string tem;
	for(i=0;i<a.size();i++)
	{
		if(a[i]==' ') 
		{
			m=m*10+num[tem];
			tem.clear();
		}
		else tem+=a[i];
	}
	tem.clear();
	for(i=0;i<b.size();i++)
	{
		if(b[i]==' ') 
		{
			n=n*10+num[tem];
			tem.clear();
		}
		else tem+=b[i];
	}
	return m+n;
}
int main()
{
	string str;
	while(getline(cin,str))
	{
		int len=str.size();
		string a,b;int i,k;
		for(i=0;i<len;i++)
		{
			if(str[i]=='+') break;
			a+=str[i];
		}
		for(k=i+2;k<len;k++)
		{
			if(str[k]=='=') break;
			b+=str[k];
		}
		if(add(a,b)==0) break; 
		else cout<<add(a,b)<<endl;
	}
	return 0;
}

좋은 웹페이지 즐겨찾기