ACM简单的计算器

http://acm.hdu.edu.cn/showproblem.php?pid=1237

开始看的时候头脑一团乱,想以符号为中心,然后慢慢的合并,后来实现的时候才发现太麻烦。

后来想到先处理乘除,再处理加减,把处理过的数字和未处理的符号分别放入两个数组。第二轮再取出来就行啦。

 

WA了好几次,才发现,<后忘记加了等于.

#include<stdio.h>
#include<string.h>

#define FMAX 1000

double rsearch(int* i,char num[]);

main()
{
    char num[FMAX];
    char simple[FMAX];
    int i,j,k,flag=0,factor,sum,s,l;
    double num1[FMAX];
    while(gets(num),strlen(num)-1!=0||num[0]!='0')
    {
        flag=j=k=0;
        memset(simple,'\0',sizeof(simple));
        l=strlen(num)-1;
    while(l<FMAX)
    {
    l++;
          num[l]='\0';    
    }
      for(i=0;num[i]!='\0';i++)
      {
              factor=1;
          sum=0;
          if('0'<=num[i]&&num[i]<='9')
          {
          while(num[i]!=' '&&num[i]!='\0')
          i++;
          for(s=i-1;s>=0&&num[s]!=' ';s--)
        {
        sum+=(num[s]-'0')*factor;
         factor*=10;
      }
      num1[j]=sum;
      j++;
       if(num[i]=='\0')
             break;
        }
        if(num[i]=='*')
          {
              num1[j-1]=num1[j-1]*rsearch(&i,num);
                if(num[i]=='\0')
             break;
            }
           if(num[i]=='/')
           {
           num1[j-1]=num1[j-1]/rsearch(&i,num);
             if(num[i]=='\0')
             break;
           }
           if(num[i]=='+'||num[i]=='-')
           {
               simple[k]=num[i];
               k++;
           }
      }
      for(i=0;simple[i]!='\0';i++)
      {
          if(simple[i]=='+')
            {
                num1[i+1]+=num1[i];
                flag=1;
            }
                if(simple[i]=='-')
            {
                num1[i+1]=num1[i]-num1[i+1];
                flag=1;
            }
        }
        if(flag==1)
        printf("%.2lf\n",num1[i]);
        else
        printf("%.2lf\n",num1[0]);
        memset(num1,0,sizeof(num));
    }
}

double rsearch(int* i,char num[])
{
    int j,factor=1,sum=0;
    *i=*i+2;
  while(num[*i]!=' '&&num[*i]!='\0')
  (*i)++;
  for(j=*i-1;num[j]!=' ';j--)
  {
      sum+=(num[j]-'0')*factor;
      factor*=10;
  }
  return sum;
}

你可能感兴趣的:(ACM简单的计算器)