题解
由于数位很大,所以要朝着数位方向想,对于从左到右数第 \(i\) 位,其贡献为 \([1,i-1]\) 位组成的数字*10 + \(s_i\),等于 \([1,i]\) 区间放到了答案的 \([n-i+1,n]\)
code
#include<bits/stdc++.h>
using namespace std;
int a[400005]={0};
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
string s;
cin>>s;
int sum=0;
for(int i=0;i<n;i++)
{
sum+=s[i]-'0';
a[i]=sum;
}
int num=0;
stack<int> ans;
for(int i=n-1;i>=0;i--)
{
num+=a[i];
ans.push(num%10);
num/=10;
}
while(num)
{
ans.push(num%10);
num/=10;
}
while(ans.size()&&ans.top()==0) ans.pop();
if(ans.size())
while(ans.size())
{
cout<<ans.top();
ans.pop();
}
else cout<<0;
puts("");
}
return 0;
}
标签:10,int,Countdown,while,num,ans,Final,size
From: https://www.cnblogs.com/pure4knowledge/p/18288072