bnuoj 1057 函数

来源:互联网 发布:车载wince修改gps端口 编辑:程序博客网 时间:2024/06/03 15:47

      这题让我做成这样,也是醉了,看来做题方法很重要,不然会很坑!!!

解法:字符串模拟!

#include<bits/stdc++.h>using namespace std;int main(){    int  T;    cin>>T;    while(T--)    {        string str,s;        cin>>str>>s;        int op=str.find('='),len=str.size();        int op1=s.find('='),len1=s.size(),flag=0;        string num;        num=s.substr(op1+1,len1-op1);        if(num[0]=='-')            flag=1;        string tmp;        if(isdigit(str[op+1])||str[op+1]=='x')            tmp+='+';        for(int i=op+1;i<len;i++)        {            if(str[i]=='x')            {                if(!isdigit(str[i-1]))                {                    tmp+="1*";                    tmp+=num;                }                else                {                    tmp+='*';                    tmp+=num;                }            }            else                tmp+=str[i];        }        int len2=tmp.size();        long long sum=0;        for(int i=0;i<len2;i++)        {            if(tmp[i]=='-')            {                i++;                int n=0,f=0,m=0,zh=0,f2=0;                while(i<len2&&isdigit(tmp[i]))                {                    n=n*10+tmp[i]-'0';                    i++;                }                if(tmp[i]=='*')                {                    i++;                    if(flag)                        i++;                    while(i<len2&&isdigit(tmp[i]))                    {                        m=m*10+tmp[i]-'0';                        i++;                    }                    if(flag)                        m=0-m;                    f2=1;                }                if(tmp[i]=='^')                {                    i++;                    while(i<len2&&isdigit(tmp[i]))                    {                        zh=zh*10+tmp[i]-'0';                        i++;                    }                    f=1;                }                if(f2)                {                    if(f)                        sum-=n*pow(m,zh);                    else                        sum-=n*m;                }                else                {                    if(f)                        sum-=pow(n,zh);                    else                        sum-=n;                }                i--;            }            else if(tmp[i]=='+')            {                i++;                int n=0,f=0,m=0,zh=0,f2=0;                while(i<len2&&isdigit(tmp[i]))                {                    n=n*10+tmp[i]-'0';                    i++;                }                if(tmp[i]=='*')                {                    i++;                    if(flag)                        i++;                    while(i<len2&&isdigit(tmp[i]))                    {                        m=m*10+tmp[i]-'0';                        i++;                    }                    if(flag)                        m=0-m;                    f2=1;                }                if(tmp[i]=='^')                {                    i++;                    while(i<len2&&isdigit(tmp[i]))                    {                        zh=zh*10+tmp[i]-'0';                        i++;                    }                    f=1;                }                if(f2)                {                    if(f)                        sum+=n*pow(m,zh);                    else                        sum+=n*m;                }                else                {                    if(f)                        sum+=pow(n,zh);                    else                        sum+=n;                }                i--;            }        }        cout<<"f(x)="<<sum<<"\n";    }    return 0;}


 

 

0 0
原创粉丝点击