社区讨论
玄关求调
P1175表达式的转换参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1n43g
- 此快照首次捕获于
- 2025/11/03 19:15 4 个月前
- 此快照最后确认于
- 2025/11/03 19:15 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1;
int f[100];
memset(f,0,sizeof(f));
char s[100],a[100],z[100],top;
char ztop=' ',zh[100];
int k=0,m=0,h=0,c=0,zz=0,xy[100];
int y=0;
cin>>s1;
for(int i=0;i<s1.size();i++){
if(s1[i]=='('){
zh[zz]='(';
xy[zz]=i;
ztop=zh[zz];
zz++;
}else if(s1[i]==')'){
if(ztop!='('||zz==0){
zh[zz]=')';
xy[zz]=i;
ztop=zh[zz];
zz++;
}else{
zz-=2;
ztop=zh[zz];
zz++;
}
}
}
for(int i=0;i<zz;i++){
f[xy[i]]=3;
}
for(int i=0;i<s1.size();i++){
if(f[i]!=3){
s[c]=s1[i];
c++;
}
}
for(int i=0;i<c;i++){
if('0'<=s[i]&&s[i]<='9'){
a[k]=' ';
k++;
if(s[i-1]=='-'&&i!=0){
if(s[i-2]<'0'&&s[i-2]!=')'||s[i-2]>'9'&&s[i-2]!=')'||i==1){
a[k]='-';
k++;
a[k]=s[i];
k++;
}else{
a[k]=s[i];
k++;
}
}else{
a[k]=s[i];
if(s[i+1]<'0'||s[i+1]>'9'){
a[k+1]=' ';
k+=2;
}else{
k++;
}
}
}
if(y!=0){
h++;
}else{
h=0;
}
if(s[i]=='('){
z[m]='(';
top=z[m];
m++;
y++;
}else if(s[i]==')'){
y--;
m--;
for(;m>=0;m--){
if(z[m]!='('){
a[k]=z[m];
k++;
}else{
break;
}
}
top=z[m-1];
}else if(s[i]=='+'){
if(y!=0){
if(h==0){
z[m]='+';
top='+';
m++;
}else{
m--;
for(;m>=0;m--){
if(z[m]=='('){
m++;
break;
}
a[k]=z[m];
k++;
}
z[m]='+';
top='+';
m++;
}
}else if(m==0){
z[m]='+';
top='+';
m++;
}else{
m--;
for(;m>=0;m--){
a[k]=z[m];
k++;
}
m++;
z[m]='+';
top='+';
m++;
}
}else if(s[i]=='-'){
if('0'<=s[i-1]&&s[i-1]<='9'||s[i-1]==')'){
if(y!=0){
if(h==0){
z[m]='-';
top='-';
m++;
}else{
m--;
for(;m>=0;m--){
if(z[m]=='('){
m++;
break;
}
a[k]=z[m];
k++;
}
z[m]='-';
top='-';
m++;
}
}else if(m==0){
z[m]='-';
top='-';
m++;
}else{
m--;
for(;m>=0;m--){
a[k]=z[m];
k++;
}
m++;
z[m]='-';
top='-';
m++;
}
}
}else if(s[i]=='*'){
if(m==0||top!='*'&&top!='/'&&top!='^'){
z[m]='*';
top='*';
m++;
}else{
m--;
for(;m>=0;m--){
if(z[m]=='+'||z[m]=='-'||z[m]=='('){
break;
}
a[k]=z[m];
k++;
}
m++;
z[m]='*';
top='*';
m++;
}
}else if(s[i]=='/'){
if(m==0||top!='/'&&top!='*'&&top!='^'){
z[m]='/';
top='/';
m++;
}else{
m--;
for(;m>=0;m--){
if(z[m]=='+'||z[m]=='-'||z[m]=='('){
break;
}
a[k]=z[m];
k++;
}
m++;
z[m]='/';
top='/';
m++;
}
}else if(s[i]=='^'){
z[m]='^';
top='^';
m++;
}
a[k]=' ';
k++;
}
m--;
for(;m>=0;m--){
a[k]=z[m];
k++;
}
a[k]=' ';
k++;
long long zhai[100],n=0,n1=0,aa[100],kk=0,p1=0;
bool u=0;
memset(aa,0,sizeof(aa));
char p[100];
for(int i=0;i<k;i++){
if('0'<=a[i]&&a[i]<='9'){
p[p1]=a[i];
p1++;
if(p1==1){
if(a[i-1]=='-'){
if(a[i-2]==' '){
u=1;
}
}
}
}else if(a[i]==' '&&p1!=0){
for(int j=p1-1,t=0;j>=0;j--,t++){
aa[kk]+=pow(10,t)*(p[j]-48);
}
if(u==1){
aa[kk]*=(-1);
u=0;
}
kk++;
p1=0;
}
}
for(int i=0;i<k;i++){
if(a[i]!=' '){
cout<<a[i]<<" ";
}
}
cout<<endl;
int pp=0;
for(int i=0;i<k;i++){
if(pp==0&&'0'<=a[i]&&a[i]<='9'){
zhai[n]=aa[n1];
n++;
n1++;
pp++;
}else{
pp=0;
}
if(a[i]=='+'){
zhai[n-2]=zhai[n-2]+zhai[n-1];
n--;
}else if(a[i]=='-'){
if(a[i+1]==' '){
zhai[n-2]=zhai[n-2]-zhai[n-1];
n--;
}
}else if(a[i]=='*'){
zhai[n-2]=zhai[n-2]*zhai[n-1];
n--;
}else if(a[i]=='/'){
zhai[n-2]=zhai[n-2]/zhai[n-1];
n--;
}else if(a[i]=='^'){
zhai[n-2]=pow(zhai[n-2],zhai[n-1]);
n--;
}
if('0'>a[i]&&a[i]!=' '||'9'<a[i]&&a[i]!=' '){
for(int j=0;j<n;j++){
cout<<zhai[j]<<" ";
}
for(int j=i+1;j<k;j++){
if(a[j]!=' '){
cout<<a[j]<<" ";
}
}
cout<<endl;
}
}
return 0;
}
80分#9#10错了
回复
共 0 条回复,欢迎继续交流。
正在加载回复...