tyvj1041 表达式求值

来源:互联网 发布:域名企业代备案 编辑:程序博客网 时间:2024/06/08 00:27

链接网址:http://tyvj.cn/Problem_Show.asp?id=1041

#include<iostream>#include<cstring>#include<cstdio>#include<sstream>#include<algorithm>using namespace std;const int MAX=1505;char sum1[MAX],sum2[MAX];int a[MAX];string str;string addion(string s1,string s2)  {   int i,j;      memset(sum1,0,sizeof(sum1));      memset(sum2,0,sizeof(sum2));      for(j=0,i=s1.length()-1;i>=0;i--)          sum1[j++]=s1[i]-'0';      for(j=0,i=s2.length()-1;i>=0;i--)          sum2[j++]=s2[i]-'0';      for(i=0;i<MAX;i++)       {  sum1[i]+=sum2[i];          if(sum1[i]>=10 )           {   sum1[i]-=10;              sum1[i+1]++;           }      }      string s="";        for(i=MAX;(i>=0)&&(sum1[i]==0);i--) ;      if(i>=0)      for(;i>=0;i--)  s+=sum1[i]+'0';      else s="0";      return s;  }  string sub(string s3,string s4)//减法运算    {   int i,j,flag=1;      string s5="";      memset(sum1,0,sizeof(sum1));      memset(sum2,0,sizeof(sum2));      //if((s4.length()>s3.length())||(s4.length()==s3.length()&&s3.compare(s4)<0))//当被减数大于减数的时候交换两个字符串,且应该放在赋值前面        //{ swap(s3,s4);      //  flag=0;      //}      for(i=s3.length()-1,j=0;i>=0;i--)        sum1[j++]=int(s3[i]-'0');      for(i=s4.length()-1,j=0;i>=0;i--)        sum2[j++]=int(s4[i]-'0');      //cout<<s3<<" "<<s4<<endl;      for(i=0;i<s3.length();i++)      { if(sum1[i]>=sum2[i]) sum1[i]-=sum2[i];        else        {  sum1[i]-=sum2[i]-10;           sum1[i+1]-=1;         }      }      for(i=MAX;i>=0&&sum1[i]==0;i--);     // if(!flag) s5="-";      if(i>=0)        for(;i>=0;i--)           s5+=sum1[i]+'0';      else s5="0";      return s5;  } int main(){    int l,i,t=0,k;    //cout<<sub("123123","123")<<endl;    while(cin>>str){        l=str.length();        for(i=0;i<l;i++){            if(str[i]=='+') {str[i]=' ';a[t++]=0;}            if(str[i]=='-') {str[i]=' ';a[t++]=1;}            }        //for(i=0;i<t;i++)        //    cout<<i<<" "<<a[i]<<endl;        istringstream in(str);                string s,s1,sum;        in>>s1;        sum=s1;        k=0;        while(in>>s){                        if(a[k]==0) sum=addion(sum,s);            if(a[k]==1) sum=sub(sum,s);            k++;        }         cout<<sum<<endl;     }    return 0;}


 

原创粉丝点击