我想问一下为什么把a[i]-1+'1' 改成 a[i]-'0'就wa了
暴龙爱吃白菜。
给定一个字符串,由 1 个 1,2 个 2,3 个 3,4 个 4,5 个 5,6 个 6,7 个 7,8 个 8,9 个 9,10 个 10……以此类推,依次拼接而成。
询问字符串第 l 位到第 r 位的数字之和。
输入包含多组测试数据。
第一行一个正整数 T。
接下来 T 组问询,每次两个正整数 l,r。
T 行,每行一个整数代表答案。
4
5 9
46 50
114 514
19 19810
18
3
1134
74924
样例解释
字符串为:
12233344445555566666677777778888888899999999910101010101010101010⋯⋯
对于第一组询问,第 5 位到第 9 位的数字之和为 3+3+4+4+4=18。
对于第二组询问,第 46 位到第 50 位的数字之和为 1+0+1+0+1=3。
数据范围
本题采用捆绑测试。
对于 100% 的数据,满足 1≤T≤105,1≤l≤r≤106。
#include<bits/stdc++.h>
using namespace std;
int q[1000005];
int main()
{
int t,l,r;
cin>>t;
string a;
for(int i=1;i<=1000;i++)
{
for(int j=1;j<=i;j++)
{
if(i<10) a+=char(i-1+'1');
else if(i<100) a+=char(i/10-1+'1'),a+=char(i%10-1+'1');
else if(i<1000) a+=char(i/100-1+'1'),a+=char(i/10%10-1+'1'),a+=char(i%10-1+'1');
}
}
q[0]=a[0]-'0';
for(int i=1;i<1000004;i++)
{
q[i]=q[i-1]+a[i]-'0';
}
for(int i=0;i<t;i++)
{
cin>>l>>r;
cout<<q[r-1]-q[l-2]<<endl;
}
}