题解:P15983 [PA 2026] 列竖式 / Dodawanie
本文中规定,进位指向左进一位,而被进位指从右向被进了一位。如,
对于每一位数,设两个加数对应位之和为
令
于是我们可以从左向右扫描,维护一个计数器
代码如下。
#include<bits/stdc++.h>
using namespace std;
string a,b,c;
int n,cnt,pre=-1;
long long ans=0;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>a>>b>>c;
n=a.size();
for(int i=0;i<n;i++){
int s=a[i]-'0'+b[i]-'0',d=c[i]-'0';
int r,q;
if(d==s%10) r=0,q=s/10;
else if(d==(s+1)%10) r=1,q=(s+1)/10;
else{
cnt=0;
pre=-1;
continue;
}
if(pre!=-1&&q!=pre) cnt=0;
if(q==0) cnt++;
if(r==0) ans+=cnt;
pre=r;
}
cout<<ans;
return 0;
}