time limit per test
0.5 seconds
memory limit per test
256 megabytes
Please note that the time limit for this problem is only 0.5 seconds per test.
Vladislav wrote the integers from 11 to nn, inclusive, on the board. Then he replaced each integer with the sum of its digits.
What is the sum of the numbers on the board now?
For example, if n=12n=12 then initially the numbers on the board are:
1,2,3,4,5,6,7,8,9,10,11,12.1,2,3,4,5,6,7,8,9,10,11,12.
Then after the replacement, the numbers become:
1,2,3,4,5,6,7,8,9,1,2,3.1,2,3,4,5,6,7,8,9,1,2,3.
The sum of these numbers is 1+2+3+4+5+6+7+8+9+1+2+3=511+2+3+4+5+6+7+8+9+1+2+3=51. Thus, for n=12n=12 the answer is 5151.
Input
The first line contains an integer tt (1≤t≤1041≤t≤104) --- the number of test cases.
The only line of each test case contains a single integer nn (1≤n≤2⋅1051≤n≤2⋅105) --- the largest number Vladislav writes.
Output
For each test case, output a single integer --- the sum of the numbers at the end of the process.
Example
Input
Copy
7
12
1
2
3
1434
2024
200000
Output
Copy
51
1
3
6
18465
28170
4600002
解题说明:此题其实是求数列之和,两位数以上就需要把数字全部加起来求和,为了保证时间,可以先把输入范围1-200000内的结果全部计算出来,后面根据输入的n值直接输出答案即可。
cpp
#include<stdio.h>
int digitsum(int n)
{
if (n == 0)
{
return 0;
}
int m = n % 10;
return m + digitsum(n / 10);
}
int main()
{
int t;
scanf("%d", &t);
int ar[200001];
ar[0] = 1;
for (int i = 0; i < 200001; i++)
{
ar[i] = ar[i - 1] + digitsum(i + 1);
}
while (t--)
{
int n;
scanf("%d", &n);
printf("%d\n", ar[n - 1]);
}
return 0;
}