2nd,9thTLE求助
查看原帖
2nd,9thTLE求助
819278
48WangYanJi楼主2023/9/29 16:53

思路:

对于加减先计算末尾,再逐个往前计算进退位。 对于乘除只用在末尾增减一位。

代码:

#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;
}

如何改进算法?

2023/9/29 16:53
加载中...