求助
查看原帖
求助
556362
Unnamed114514楼主2021/11/23 17:34

似乎是高精度减法乱码了。

#include<bits/stdc++.h>
#define str string
using namespace std;
str s,ans="0";
int l,f=1;
inline void add(){
	int k=0;
	for(int i=f-1;i>=0;--i){
		if(ans[i]-'0'+1+k>=10){
			k=1;
			ans[i]=(ans[i]-'0'+1+k)%10+ans[i];
		} else{
			ans[i]+=1+k;
			k=0;
			break;
		} 
	}
	if(k)
		ans=' '+ans,f++,ans[0]=k+'0';
	return;
}
inline void az(str b){
	for(int i=0;i<l;++i){
		if(b[i]-s[i]<0){
			--b[i+1];
			b[i]+=10;
		}
		s[i]=b[i]-s[i];
	}
	for(int i=l-1;i>=0;--i)
		if(s[i]=='0'){
			--l;
			s[i]='\0';
		} else
			break;
	return;
}
inline void work1(){
	--s[l-1];
	if(s[l-1]=='0')
		s[--l]='\0';
}
inline void work2(){
	str qaq="\0";
	for(int i=1;i<=l;++i)
		qaq+='0';
	qaq+='1';
	az(qaq);
}
inline void dfs(){
	while(l){
		if(s[l-1]<'5')
			work1();
		else if(s[l-1]>'5')
			work2();
		else{
			bool p=1;
			for(int i=l-2;i>=0;--i){
				if(s[i]>'5'){
					work2();
					break;
				} else if(s[i]<'5'){
					work1();
					break;
				}
			}
			if(p)
				work1();
		}
		add();
	}
	dfs();
}
int main(){
	str qwq;
	cin>>qwq;
	l=qwq.size();
	for(int i=l-1;i>=0;--i)
		s+=qwq[i];
	dfs();
	for(int i=0;i<f;++i)
		putchar(ans[i]);
	return 0;
} 
2021/11/23 17:34
加载中...