压位求调
查看原帖
压位求调
803885
_8008008楼主2023/8/13 09:39

WA

1000000001
1000000001

WA输出

200000002

因为

 10000000|01
+10000000|01
------------
 20000000|2
=200000002

不会调,求调

#include<iostream>
#include<string>
#include<math.h>
#define N 1000
#define M 8
using namespace std;
string add(string a,string b){
	int c[N],d[N],lena=a.length(),lenb=b.length(),len=1,ans[N];
	string sum="";
	for(int i=0;i<N;i++)ans[i]=c[i]=d[i]=0;
	for(int i=0;i<max(lena,lenb);i++){
		if(i<lena)c[len]=c[len]*10+(a[i]-'0');
		if(i<lenb)d[len]=d[len]*10+(b[i]-'0');
		if((i+1)%M==0)len++;
	}
	if(max(lena,lenb)%9!=0)len++;
	for(int i=len-1;i>-1;i--)ans[i]=c[i]+d[i];
	for(int i=len-1;i>-1;i--)ans[i-1]+=ans[i]/((int)pow(10,M)),ans[i]=ans[i]%((int)pow(10,M));
	for(int i=len-2;i>0;i--){
		string c=to_string(ans[i]);
		while(c.length()<M)c="0"+c;
		sum+=c;
	}
	if(ans[0]!=0)sum=to_string(ans[0])+sum;
	sum+=to_string(ans[len-1]);
	return sum;
}
int main(){
	string a,b;
	cin>>a>>b;
	cout<<add(a,b);
	return 0;
}
2023/8/13 09:39
加载中...