Writing Books
题目大意
给定T个数,对于每个数,求从1到n的所有数的位数数量之和。
解题思路
签到题。
计算每个位数的数量的贡献,从9、99、999、…、枚举到比n大的情况,每次这个位数的数量。
参考代码
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; }
|