给你一个数年份n,把1到n的每个年份都写出来连在一起,最后得到的是几位数?例如n=10,得到的数字是12345678910,因此是11位数。
输入格式:
首先输入一个整数T(1<=T<=10),表示测试组数。
每组测试输入一个整数n(1<=n<=10000)。
输出格式:
对于每组测试,在一行上输出把1到n的每个年份都写出来连在一起,最后得到的数据的位数。
输入样例:
2
10
1
输出样例:
11
1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路:
首先输入一个整数 t,表示测试组数。然后通过循环(这里使用for循环会超时)依次输入每组测试数据(即年份n),使用sum用来记录拼接下来的数字的总位数,并初始化为0。遍历从1到n的所有整数,并把它赋值给一个变量num,如果num>0,sum++,并判断num是否为多位数(即两位及两位上的数),最后输出总的位数。
#include <stdio.h>
int main() {
int t, n, i, j;
scanf("%d", &t); // 输入测试组数
while (t--) { // 循环遍历每组测试数据
scanf("%d", &n); // 输入年份
long long sum = 0;
for (i = 1; i <= n; i++) {
int num = i;
while (num > 0) { // 计算当前数位数
sum++;
num /= 10;
}
}
printf("%lld\n", sum); // 输出总位数
}
return 0;
}
测试点:
本题共一个测试点。切记在输入测试组的时候不用使用for循环,否则一分不得