题解 | #四则运算#

四则运算

https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

package main
import (
	"os"
	"bufio"
	"fmt"
	"strconv"
	"strings"
)
type Stake struct{
	con []string
}
func (thisS *Stake)push(s string){
	thisS.con = append(thisS.con, s)
}
func (thisS *Stake)pop()(s string){
	s = thisS.con[len(thisS.con)-1]
	thisS.con = thisS.con[:len(thisS.con)-1]
	return
}
func main(){
	input:=bufio.NewScanner(os.Stdin)
	input.Scan()
	data:=input.Text()
	d:=strings.Split(data,"")
	youxianji:=map[string]int{
		"*":3,"/":3,"+":2,"-":2,"(":1,"{":1,"[":1,
	}
	//先搞个栈,这里因为只要压入删除功能,所以简单一点
	var s Stake
	s.con = make([]string,0)
	//准备个字符切片用来放字符,因为有多位数,所以要切片
	houzhui:=make([]string,0)
	lend:=len(d)
	for i:=0;i<lend;i++{
        if (d[i]>="0"&&d[i]<="9")||(i>0&&d[i]=="-"&&(d[i-1]>"9"||d[i-1]<"0")&&d[i-1]!="}"&&d[i-1]!="]"&&d[i-1]!=")"){
			str := d[i]
            if i!=lend-1{
                i++
			for d[i]>="0"&&d[i]<="9"&&i!=lend-1{
				str = str + d[i]
				i++
			}
			i--
            }
			
			houzhui = append(houzhui,str)
		}else if d[i]=="("||d[i]=="["||d[i]=="{"{
			s.push(d[i])
		}else if d[i]=="}"||d[i]=="]"||d[i]==")"{
			now := s.pop()
			for now!="("&&now!="["&&now!="{"{
				houzhui = append(houzhui,now)
				now =s.pop()

			}
		}else {
			for len(s.con)!=0&&youxianji[d[i]]<=youxianji[s.con[len(s.con)-1]]{
				houzhui = append(houzhui,s.pop())
			}
			s.push(d[i])
		}

	}
	for len(s.con)!=0{
		houzhui = append(houzhui,s.pop())
	}
	//后缀表达式搞完了,接着搞答案
	//搞两个栈放数和运算符号,放进去
	signzhan := Stake{}
	signzhan.con = make([]string,0)
	numzhan := Stake{}
	numzhan.con = make([]string,0)
	for _,i:=range houzhui{
		if i!="+"&&i!="-"&&i!="*"&&i!="/"{
			numzhan.push(i)
		}else {
			num2 := numzhan.pop()
			num1:=numzhan.pop()
			n1,_:=strconv.Atoi(num1)
			n2,_:=strconv.Atoi(num2)
			switch i {
			case "+":numzhan.push(strconv.Itoa(n1+n2))
			case "-":numzhan.push(strconv.Itoa(n1-n2))
			case "*":numzhan.push(strconv.Itoa(n1*n2))
			case "/":numzhan.push(strconv.Itoa(n1/n2))
				
			
			}
		}
	}
	fmt.Println(numzhan.pop())

}



全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务