简单模拟题。一个int写成了char,搞了4个多小时。真垃圾。。
#include<stdio.h> #include<string.h> char tmp[2000000+10],s[2000000+10]; char ans[2000000+10]; char u[2000000+10]; int g; int T,len,f; void init() { memset(tmp,0,sizeof tmp); memset(ans,0,sizeof ans); f=0; memset(s,0,sizeof s); len=0; } void c() { for(int i=0; tmp[i]; i++) if( tmp[i]=='d' ||tmp[i]=='+'||tmp[i]=='-'||tmp[i]=='*'||tmp[i]=='/' ||tmp[i]=='('||tmp[i]==')' ||(tmp[i]>='0'&&tmp[i]<='9') ) s[len++]=tmp[i]; } void work() { int pre=0; int pos1,pos2; for(int i=0; s[i]; i++) { if(s[i]=='d') { pos1=i,pos2=i; for(int j=i+1; s[j]; j++) { if(s[j]>='0'&&s[j]<='9') pos2=j; else break; } for(int j=i-1; j>=0; j--) { if(s[j]>='0'&&s[j]<='9') pos1=j; else break; } int a=0; for(int j=pos1; j<=i-1; j++) a=a*10+s[j]-'0'; for(int j=pre; j<pos1; j++) ans[f++]=s[j]; pre=pos2+1; memset(u,0,sizeof u); g=0; u[g++]='['; for(int j=i; j<=pos2; j++) u[g++]=s[j]; u[g++]=']'; if(a==0) a=1; if(a!=1) ans[f++]='('; for(int k=0; u[k]; k++) ans[f++]=u[k]; for(int j=1; j<=a-1; j++) { ans[f++]='+'; for(int k=0; u[k]; k++) ans[f++]=u[k]; } if(a!=1) ans[f++]=')'; } } for(int j=pre; s[j]; j++) ans[f++]=s[j]; } void print() { for(int i=0; ans[i]; i++) { if(ans[i]=='+'||ans[i]=='-'||ans[i]=='*'||ans[i]=='/') printf(" %c ",ans[i]); else printf("%c",ans[i]); } printf(" = [Result] "); } int main() { scanf("%d",&T); getchar(); while(T--) { init(); gets(tmp); c(); work(); print(); } return 0; }