偶位回文月赛 Div2. 初中组

题目描述
我们将这样的数字定义为 偶位回文数:

  1. 该数字的位数是偶数
  2. 该数字是一个回文数
    例如:1221就是一个偶位回文数,而 121和 1234都不是偶位回文数,前者不满足数字的位数是偶数,后者不满足回文数。

给定一个正整数 n,请你求出从小到大前 n 个偶位回文数的和是多少?

输入格式
输入共一行,一个正整数 n。

输出格式
输出前 n 个偶位回文数的和。

样例
输入数据#1
2
输出数据#1
33
解释#1
从小到大前两个偶位回文数是 11,22,和为 33。

输入数据#2
5
输出数据#2
165
解释#2
11+22+33+44+55=165
数据范围
对于 30% 的测试数据满足:1≤n≤100。
对于 60% 的测试数据满足:1≤n≤5000。
对于 100% 的测试数据满足:1≤n≤10^5

我的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int sum=0;
    long long xs=0;
    for(int i=1;sum<=n;i++)
    {
        string a;
        stringstream sin;
        sin<<i;
        sin>>a;
        string b=a;
        reverse(b.begin(),b.end());
        if(a.size()%2==0&&b==a)
        {
            sum++;
            if(sum<=n)
            {
                xs+=i;
            }
        }
    }
    cout<<xs;
}

为什么超时?