hdu 1228 A + B

3869 단어 C++HDU
A + B
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12149    Accepted Submission(s): 7099
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

 
/*문제 풀이: 
    코드 가 길 지만 생각 은 분명 합 니 다.전체 문자열 s 를 입력 하고'+'전의 문자열 을 s1 에 할당 합 니 다.'+'후의 할당 은 s2 에 있 습 니 다.
그 다음 에 s1 과 s2 를 처리 하고 먼저 빈 칸 의 개수 에 따라 서로 다른 형식 으로 전 환 된 가산 a 와 b 를 구하 고 마지막 으로 a+b 를 출력 합 니 다.
경기 가 끝나 고 곽 군의 코드 를 보고 더욱 간결 해 졌 습 니 다.while(scanf("%s",s)&&strcmp(s,"+")로!=0)입력 수,t 로 변환 후 sum=sum*10+t. 
*/  
#include<cstdio>
#include<cstring>
int f(char *s)
{
    if(s[0]=='z') return 0;
    if(s[0]=='o') return 1;
    if(s[0]=='t'&&s[1]=='w') return 2;
    if(s[0]=='t'&&s[1]=='h') return 3;
    if(s[0]=='f'&&s[1]=='o') return 4;
    if(s[0]=='f'&&s[1]=='i') return 5;
    if(s[0]=='s'&&s[1]=='i') return 6;
    if(s[0]=='s'&&s[1]=='e') return 7;
    if(s[0]=='e') return 8;
    if(s[0]=='n') return 9;
}     
int main()
{
    char s[22],s1[22],s2[22],str1[22],str2[22];
    int len1,len2,i,j,k,t,a,b,ge,shi,st;
    while(gets(s)&&strcmp(s,"zero + zero =")!=0)
    {
        memset(s1,'\0',sizeof(s1));
        memset(s2,'\0',sizeof(s2));
        for(i=0; s[i]!='+'; i++)
        {
            s1[i] = s[i];
        }
        st = i+2;
        s1[i-1] = '\0';
        int len=strlen(s);
        for(i=st,j=0; i<len-2; i++)
        {
            s2[j++] = s[i];
        }
        s2[j]='\0';    
        memset(str1,'\0',sizeof(str1));
        memset(str2,'\0',sizeof(str2)); 
        len1=strlen(s1),len2=strlen(s2);
/************** '+'    **********************/ 
        t=0;
        for(i=0; i<len1; i++)
        {
            if(s1[i]==' ')
            t++;
        }
        if(t==0)
        {
            a = f(s1);
        }
        if(t==1)
        {
            for(i=0; s1[i]!=' '; i++)
            {
                str1[i] = s1[i];
            }
            st = i+1;
            for(i=st,j=0; i<len1; i++)
            {
                str2[j++] = s1[i];
            } 
            a = f(str1)*10+f(str2);
        }
/************** '+'    **********************/ 
        t=0;
        for(i=0; i<len2; i++)
        {
            if(s2[i]==' ')
            t++;
        }
        if(t==0)
        {
            b = f(s2);
        }
        if(t==1)
        {
            for(i=0; s2[i]!=' '; i++)
            {
                str1[i] = s2[i];
            }
            str2[i] = '\0';
            st = i+1;
            for(i=st,j=0; i<len2; i++)
            {
                str2[j++] = s2[i];
            }
            b = f(str1)*10+f(str2);
        }
        printf("%d
",a+b); } return 0; }

이 문 제 는 strtok 함수 로 잘 해결 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기