思路:
对于加减先计算末尾,再逐个往前计算进退位。
对于乘除只用在末尾增减一位。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,m;
cin>>n>>m;
char a[5000000];
for(int i=1;i<=n;i++){
cin>>a[i-1];
}
while(m>0){
char wor;
cin>>wor;
if(wor=='+'){
int i=n-1;
a[i]=char(a[i]+1);
while(a[i]=='2'){
a[i]='0';
i--;
a[i]=char(a[i]+1);
}
}
if(wor=='-'){
int i=n-1;
a[i]=char(a[i]-1);
while(a[i]=='0'-1){
a[i]='1';
i--;
a[i]=char(a[i]-1);
}
}
if(wor=='*'){
n++;
a[n-1]='0';
}
if(wor=='/'){
n--;
}
m--;
}
for(int i=1;i<=n;i++){
cout<<a[i-1];
}
return 0;
}
如何改进算法?