Writing Books

题目大意

给定T个数ni,对于每个数,求从1到n的所有数的位数数量之和。

解题思路

签到题。

计算每个位数的数量的贡献,从9、99、999、…、枚举到比n大的情况,每次这个位数的数量。

参考代码

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'

bool multi=1;

void solve(){
int n;
cin>>n;
int sum=0;
int ans=0;
int cnt=0;
for(int i=9;i<=(int)1e11;i=i*10+9){
cnt++;
if(n<=i){
ans+=(n-sum)*cnt;
break;
}else{
ans+=(i-sum)*cnt;
}
sum+=i-sum;
}
cout<<ans<<'\n';
}

signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T=1;
if(multi) cin>>T;
while(T--){
solve();
}

return 0;
}