NC50999 表达式计算4

表达式计算4

https://ac.nowcoder.com/acm/problem/50999

题目:给你一个含^(乘方)与多余的括号的表达式,输出结果
思路:分治
利用递归将每个括号与符号左右拆分成一个个小式子再在计算中合并到一起
具体看代码实现(参考了较多雨巨的代码)
代码:

#include <iostream>
#include <string>
#include <math.h>
using namespace std;
string s;
int num(int l,int r)//把字符串转换成数字
{
    int ans=0;
    for(int i=l; i<=r; i++)
    {
        ans*=10;
        ans+=s[i]-'0';
    }
    return ans;
}
int solve(int l,int r)
{
    int pos1=-1,pos2=-1,pos3=-1;//pos1记录+-,pos2记录*/,pos3记录^
    int cnt=0;//记录括号
    if(l>r)return 0;
    if(l==r)return s[l]-'0';
    for(int i=l; i<=r; i++)
    {
        if(s[i]=='(')cnt++;
        if(s[i]==')')cnt--;
        if(cnt==0)//当cnt==0时说明目前没有括号了
        {
            if(s[i]=='+'||s[i]=='-')pos1=i;
            if(s[i]=='*'||s[i]=='/')pos2=i;
            if(s[i]=='^')pos3=i;
        }
    }
    if(pos1==-1&&pos2==-1&&pos3==-1)//如果一直没记录到运算符说明要不数与运算符都在括号里面,要不就是只有数字没有括号
    {
        if(cnt>0&&s[l]=='(')return solve(l+1,r);//如果是开头((多出来的直接去掉
        else if(cnt<0&&s[r]==')')return solve(l,r-1);//同理结尾多出来的直接去掉
        else if(cnt==0&&s[l]=='('&&s[r]==')')return solve(l+1,r-1);//还有(1+2+3)这种情况的也直接去掉括号
        else return num(l,r);//不然就说明全部都是数字,转化成数字
    }
    if(pos1>=0)//操作运算符了
    {
        if(s[pos1]=='+')return solve(l,pos1-1)+solve(pos1+1,r);//左右拆分
        else return solve(l,pos1-1)-solve(pos1+1,r);
    }
    else if(pos2>=0)
        if(s[pos2]=='*')return solve(l,pos2-1)*solve(pos2+1,r);
        else return solve(l,pos2-1)/solve(pos2+1,r);
    else if(pos3>=0)
        return pow(solve(l,pos3-1),solve(pos3+1,r));
    else return 0;//这里不加return 0会编译报错说没出口
}
int main()
{
    cin>>s;
    cout<<solve(0,s.size()-1);
    return 0;
}
全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
king122:专业技能不要写这么多,熟悉和熟练你经不住问,排版有些难看,中间的空隙搞小一点,项目描述的话感觉是从课程中抄下来的,改一改吧,不然烂大街了,每个项目都写一两点,用什么技术实现了什么难点,然后再写一些数字上去像时间又花了90%这样,这样面试会多一些,如果觉得自己的项目还是不够用的话,我有几个大厂最近做过的实习项目,感兴趣的话可以看我简介中的项目地址
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务