标签:运算符和 32位 scanf span color strlen code alt class
题意:给出一条字符串数组,只包含数字字符和+ * 这两种运算字符;
让我们对其进行计算;
数字不超过32位,每一位数仅用最后四位来表示(相当于对10000取模)
思路:我们只要将运算符和数字慢慢入栈,对于乘法部分,就率先计算即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=6e5+10; 4 char a[maxn]; 5 stack<int>S; 6 int main() 7 { 8 S.push(0); 9 S.push(-1); 10 scanf("%s",a+1); 11 int len=strlen(a+1); 12 int sum=0; 13 for(int i=1;i<=len;i++){ 14 if(a[i]>=‘0‘&&a[i]<=‘9‘){ 15 sum=sum*10+a[i]-‘0‘; 16 } 17 else{ 18 if(S.top()==-2){ 19 S.pop(); 20 int tmp=S.top(); 21 S.pop(); 22 tmp=tmp*sum%10000; 23 S.push(tmp); 24 } 25 else S.push(sum); 26 sum=0; 27 if(a[i]==‘+‘){ 28 S.push(-1); 29 } 30 else{ 31 S.push(-2); 32 } 33 } 34 } 35 if(S.top()==-2){ 36 S.pop(); 37 int tmp=S.top(); 38 S.pop(); 39 tmp=tmp*sum%10000; 40 S.push(tmp); 41 } 42 else S.push(sum); 43 int ans=0; 44 while(S.size()){ 45 int tmp=S.top(); 46 S.pop(); 47 if(S.size()) S.pop(); 48 ans=(tmp+ans)%10000; 49 } 50 printf("%d\n",ans); 51 return 0; 52 }
标签:运算符和 32位 scanf span color strlen code alt class
原文地址:https://www.cnblogs.com/pangbi/p/12849528.html