bnuoj 51121 Simple Polynomial Problem(栈+运算符重载+多项式运算)
来源:互联网 发布:怪物猎人帅哥捏脸数据 编辑:程序博客网 时间:2024/05/16 20:31
第一次接触多项式运算,自己写有点困难,看懂了大牛代码,然后自己写了一份;
#include <cstdio>#include <iostream>#include <cmath>#include <stack>#include <algorithm>#include <cstring>#define Mod 1000000007using namespace std;struct point{ long long a[1050]; point() { memset(a,0,sizeof(a)); } point operator+(const point &p) { point r; for(int i=0;i<1050;i++) r.a[i]=(a[i]+p.a[i])%Mod; return r; } point operator*(const point &p) { point r; for(int i=0;i<1050;i++) { if(a[i]==0) continue; for(int j=0;j<1050;j++) { if(p.a[j]==0) continue; r.a[i+j]+=a[i]*p.a[j]; r.a[i+j]%=Mod; } } return r; }};int main(){ int T; scanf("%d",&T); while(T--) { char su[1050],str[1050]; stack<point>cu; stack<char>fu; scanf("%s",str); int len=strlen(str),cnt=0; for(int i=0;i<len;i++) { if(str[i]=='(') fu.push(str[i]); else if(str[i]=='+'||str[i]=='*') { while(!fu.empty()&&fu.top()=='*'&&str[i]=='+') { su[cnt++]=fu.top(); fu.pop(); } fu.push(str[i]); } else if(str[i]=='x') su[cnt++]=str[i]; else if(isdigit(str[i])) { if(isdigit(str[i+1])) su[cnt++]=str[i]; else { su[cnt++]=str[i]; su[cnt++]='#'; } } else if(str[i]==')') { while(fu.top()!='(') { su[cnt++]=fu.top(); fu.pop(); } fu.pop(); } } while(!fu.empty()) { su[cnt++]=fu.top(); fu.pop(); } for(int i=0;i<cnt;i++) { point t; if(su[i]=='x') { t.a[1]=1; cu.push(t); } else if(isdigit(su[i])) { long long n=0; while(isdigit(su[i])) { n=n*10+su[i]-'0'; i++; } t.a[0]=n; cu.push(t); } else if(su[i]=='+'||su[i]=='*') { point t1,t2; t1=cu.top(); cu.pop(); t2=cu.top(); cu.pop(); if(su[i]=='+') cu.push(t1+t2); else if(su[i]=='*') cu.push(t1*t2); } } point r=cu.top(); int id=-1; for(int i=1049;i>=0;i--) { if(r.a[i]) { id=i; break; } } if(id!=-1) { for(int i=id;i>=0;i--) { printf("%lld",r.a[i]); printf(i==0?"\n":" "); } } else printf("0\n"); } return 0;}
0 0
- bnuoj 51121 Simple Polynomial Problem(栈+运算符重载+多项式运算)
- FZU 2215 Simple Polynomial Problem (多项式乘法 栈)
- POJ 2527 Polynomial Remains 多项式运算
- 表达式树+多项式模拟 fzu2215 Simple Polynomial Problem
- FZU 2215 Simple Polynomial Problem 多项式模拟 表达式树
- (多项式运算4.7.6)POJ 2527 Polynomial Remains(多项式除法)
- 实训C++语言设计——多项式Polynomial运算
- POJ 2126 Factoring a Polynomial 多项式运算 水
- 多项式(Polynomial)的运算——利用单链表
- Problem D: 整型数组运算符重载
- Problem A: 整型数组运算符重载
- 【FZU 2215】Simple Polynomial Problem
- 多项式运算
- 多项式运算
- 多项式运算
- Problem F: 二进制类(1)__运算符重载 hzauoj
- HDu1296(Polynomial Problem)多项式的求解
- 运算符重载 [++,--,+,<<; &&,||(不可重载)]
- 梳理spring篇-Aop机制
- Activity,Service,BroadcastReceiver生命周期
- android 进阶之UI
- HDOJ 1242 DFS
- Leetcode Factor Combinations
- bnuoj 51121 Simple Polynomial Problem(栈+运算符重载+多项式运算)
- ios之property修饰符
- java计算日期相差的天、时、分、秒
- Scrapy项目unicodeDecodeError_ascii错误的解决
- JavaScript中的document.cookie的使用
- 多线程及断点续传
- 详细介绍AIDL 的使用
- 用JavaScript实现贪吃蛇游戏
- aspx页面调用iframe标签里面的js函数