原題連結
題解
由於數位很大,所以要朝著數位方向想,對於從左到右數第 \(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;
}