NYOJ 267 郁闷的C小加(二)
http://acm.nyist.net/JudgeOnline/problem.php?pid=267
好烦....
View Code
1 #include <stdio.h> 2 #include <string.h> 3 #define maxn 1005 4 char stack[maxn],str[maxn],source[maxn],aim[maxn][10]; 5 double num[maxn],s[maxn]; 6 int main() 7 { 8 int i,j,l,k,t,le,rear,f=0,mark,iter; 9 double a,b,c; 10 scanf("%d",&t); 11 while(t--) 12 { 13 if(f) printf("\n"); 14 f=1; 15 scanf("%s",str); 16 le=strlen(str); 17 rear=-1; 18 l=0; 19 j=0; 20 mark=0; 21 iter=0; 22 for(i=0;i<maxn;i++) 23 { 24 s[i]=0; 25 num[i]=0; 26 } 27 for(i=0;i<le;i++) 28 { 29 if(str[i]==')') 30 { 31 while(stack[rear]!='(') 32 { 33 source[l]=stack[rear]; 34 l++; 35 rear--; 36 } 37 rear--; 38 } 39 else if(str[i]=='.' || ('0'<=str[i] && str[i]<='9')) 40 { 41 source[l]='_'; 42 aim[j][iter++]=str[i]; 43 if(str[i]=='.') 44 { 45 mark=1; 46 c=0.1; 47 continue; 48 } 49 if(!mark)num[j]=num[j]*10+(str[i]-'0'); 50 else 51 { 52 num[j]=num[j]+(str[i]-'0')*c; 53 c/=10; 54 } 55 if(str[i+1]!='.' && ('0'>str[i+1] || str[i+1]>'9')) 56 { 57 j++; 58 l++; 59 aim[j][iter]='\0'; 60 iter=0; 61 mark=0; 62 } 63 } 64 else if(str[i]=='(') 65 { 66 stack[++rear]=str[i]; 67 } 68 else if(str[i]=='/' || str[i]=='*') 69 { 70 while(stack[rear]=='/' || stack[rear]=='*') 71 { 72 source[l]=stack[rear]; 73 l++; 74 rear--; 75 } 76 stack[++rear]=str[i]; 77 } 78 else 79 { 80 while(rear>=0 && stack[rear]!='(') 81 { 82 source[l]=stack[rear]; 83 l++; 84 rear--; 85 } 86 stack[++rear]=str[i]; 87 } 88 } 89 while(rear>=0) 90 { 91 source[l]=stack[rear]; 92 l++; 93 rear--; 94 } 95 k=-1; 96 j=-1; 97 for(i=0;i<l-1;i++) 98 { 99 if(source[i]=='_') 100 { 101 ++k; 102 ++j; 103 printf("%s",aim[j]); 104 s[k]=num[j]; 105 } 106 else if(source[i]=='+') 107 { 108 b=s[k]; 109 a=s[k-1]; 110 k-=1; 111 s[k]=a+b; 112 } 113 else if(source[i]=='-') 114 { 115 b=s[k]; 116 a=s[k-1]; 117 k-=1; 118 s[k]=a-b; 119 } 120 else if(source[i]=='*') 121 { 122 b=s[k]; 123 a=s[k-1]; 124 k-=1; 125 s[k]=a*b; 126 } 127 else 128 { 129 b=s[k]; 130 a=s[k-1]; 131 k-=1; 132 s[k]=a/b; 133 } 134 if(source[i]!='_')printf("%c",source[i]); 135 } 136 printf("%c\n",source[i]); 137 printf("%.2lf\n",s[0]); 138 } 139 return 0; 140 }