hdu 1237 단순 계산기(아 날로 그+스 택)

단순 계산기
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15075    Accepted Submission(s): 5132
Problem Description
+,-,*,/만 포함 하 는 비 마이너스 정수 계산 표현 식 을 읽 고 이 표현 식 의 값 을 계산 합 니 다.
 
Input
테스트 입력 은 몇 가지 테스트 사례 를 포함 하고 모든 테스트 사례 는 한 줄 을 차지 하 며 줄 당 200 자 를 초과 하지 않 으 며 정수 와 연산 자 사이 에 빈 칸 으로 구분 합 니 다.불법 표현 식 이 없습니다.한 줄 에 0 만 있 을 때 입력 이 끝나 면 해당 결 과 는 출력 하지 마 십시오.
 
Output
각 테스트 용례 에 대해 1 줄,즉 이 표현 식 의 값 을 소수점 뒤의 2 자리 까지 정확하게 출력 합 니 다.
 
Sample Input

   
   
   
   
1 + 2 4 + 2 * 5 - 7 / 11 0

 
Sample Output

   
   
   
   
3.00 13.36

 
Source
절 대 컴퓨터 대학원 재시험
 
Recommend
JGShining   |   We have carefully selected several similar problems for you:   1230  1235  1228  1248  1256 
 
Statistic |  Submit |  Discuss |  Note
이 문 제 를 나 는 뜻밖에도 대답 할 말 이 없다.
사실은 아 날로 그 계산기 다.여기 에는 작은 괄호 가 없 기 때문에 매우 간단 하 다.현재 연산 자 와 다음 연산 자의 우선 순 위 를 판단 해 야 합 니 다.
됐 습 니 다.각각 두 개의 스 택 에 숫자 와 기 호 를 저장 하고 제 가 사용 하 는 배열 입 니 다.
데이터 가 틀 렸 고 찾 을 수가 없어 서 요.N 여 시간 을 낭비 했다.
몇 가지 주의 할 점 이 있다.
1:입력 한 첫 번 째 숫자 가 0 이 라면 0+2+3 은 끝 이 아니 라 5.00 을 출력 해 야 합 니 다.
2:0(빈 칸)을 입력 하면 0.00 을 출력 해 야 합 니 다.바 글 바 글
3.   숫자 는 두 자리 와 두 자리 이상 일 수 있 습 니 다.
마지막 으로 입력 방식 을 바 꾸 면 됩 니 다.wa 와 ac 코드 를 첨부 합 니 다.
ac:
#include <stdio.h>
#include <string.h>
int main()
{
    char fuhao[100],str[205];
    double num[100],sum;
    while(gets(str)&&strcmp(str,"0")!=0)
    {
        int len=strlen(str);
        int t=0,q=0;
        memset(num,0,sizeof(num));
        memset(fuhao,0,sizeof(fuhao));
        for(int i=0;i<len;i++)
        {
        	if(str[i]>='0'&&str[i]<='9')
        	{
        		double temp=0;
        		while(str[i]>='0'&&str[i]<='9')
        		temp=temp*10+str[i]-'0',i++;
        		num[q++]=temp;
        	}
        	if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')
        	fuhao[t++]=str[i];
        }
        memset(str,0,sizeof(str));
        sum=num[0];
        for(int i=1;i<q;i++)
        num[i-1]=num[i];
        for(int i=0;i<t;i++)
        {
            if(fuhao[i]=='*')
            sum=sum*num[i];
            else if(fuhao[i]=='/')
            sum=sum/num[i];
            else if(fuhao[i]=='+')
            {
                if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
                {
                    double temp=num[i];
                    while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
                    {
                        if(fuhao[i+1]=='*')
                        temp=temp*num[i+1];
                        else
                        temp=temp/num[i+1];
                        i++;
                    }
                    sum=sum+temp;
                }
                else
                sum=sum+num[i];
            }
            else if(fuhao[i]=='-')
            {
                if(fuhao[i+1]=='*'||fuhao[i+1]=='/'&&i+1<t)
                {
                    double temp=num[i];
                    while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<t)
                    {
                        if(fuhao[i+1]=='*')
                        temp=temp*num[i+1];
                        else
                        temp=temp/num[i+1];
                        i++;
                    }
                    sum=sum-temp;
                }
                else
                sum=sum-num[i];
            }
        }
        printf("%.2lf
",sum); } return 0; }

와 의
#include <stdio.h>
#include <string.h>
int main()
{
    char fuhao[200];
    double num[200],sum;
    while(scanf("%lf",&sum)!=EOF)
    {
        char mark=getchar();
        if(mark=='
'&&sum==0) { printf("%.2lf
",sum); continue; } memset(fuhao,0,sizeof(fuhao)); memset(num,0,sizeof(num)); int t=0; while(1) { scanf("%c",&fuhao[t]); scanf("%lf",&num[t]); mark=getchar(); if(mark=='
') break; t++; } for(int i=0;i<=t;i++) { if(fuhao[i]=='*') sum=sum*num[i]; else if(fuhao[i]=='/') sum=sum/num[i]; else if(fuhao[i]=='+') { if(fuhao[i+1]=='*'||fuhao[i+1]=='/') { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t) { if(fuhao[i+1]=='*') temp=temp*num[i+1]; else temp=temp/num[i+1]; i++; } sum=sum+temp; } else sum=sum+num[i]; } else if(fuhao[i]=='-') { if(fuhao[i+1]=='*'||fuhao[i+1]=='/') { double temp=num[i]; while((fuhao[i+1]=='*'||fuhao[i+1]=='/')&&i+1<=t) { if(fuhao[i+1]=='*') temp=temp*num[i+1]; else temp=temp/num[i+1]; i++; } sum=sum-temp; } else sum=sum-num[i]; } } printf("%.2lf
",sum); } return 0; }

좋은 웹페이지 즐겨찾기