试计算在区间 11 到 nn 的所有整数中,数字 xx(0\le x\le90≤x≤9)共出现了多少次?
时间: 2024-05-15 16:02:52 浏览: 148
首先,我们可以计算出在 1 到 n 的所有整数中,数字 x 出现了多少次。具体的计算方法如下:
1. 对于个位数,假设 n 的个位数字为 k,则 1 到 n 中个位数字为 x 的数字个数为:
- 如果 x > k,则个位数字为 x 的数字有 (k / 10 + 1) * 10^(n-1) 个,其中 k / 10 表示小于 k 的十位数,+1 表示 k 自身,10^(n-1) 表示其他位可以任意取值;
- 如果 x = k,则个位数字为 x 的数字有 (k / 10) * 10^(n-1) + (n % 10) + 1 个,其中 k / 10 表示小于 k 的十位数,10^(n-1) 表示其他位可以任意取值,n % 10 表示剩余位数中可能出现的个数,+1 表示 k 自身;
- 如果 x < k,则个位数字为 x 的数字有 (k / 10) * 10^(n-1) 个,其中 k / 10 表示小于 k 的十位数,10^(n-1) 表示其他位可以任意取值。
2. 对于其他位数,假设 n 的第 i 位数字为 k,则 1 到 n 中第 i 位数字为 x 的数字个数为:
- 如果 x > k,则第 i 位数字为 x 的数字有 (k / 10^(i-1) + 1) * 10^(n-i) 个,其中 k / 10^(i-1) 表示小于 k 的前 i-1 位数字,+1 表示 k 自身,10^(n-i) 表示后面 n-i 位可以任意取值;
- 如果 x = k,则第 i 位数字为 x 的数字有 (k / 10^(i-1)) * 10^(n-i) + (n % 10^(i-1)) / 10^(i-1) * 10^(n-i-1) + 1 个,其中 k / 10^(i-1) 表示小于 k 的前 i-1 位数字,10^(n-i) 表示后面 n-i 位可以任意取值,(n % 10^(i-1)) / 10^(i-1) 表示剩余位数中可能出现的个数,/10^(i-1) 表示取第 i 位数字,*10^(n-i-1) 表示后面 n-i-1 位可以任意取值,+1 表示 k 自身;
- 如果 x < k,则第 i 位数字为 x 的数字有 (k / 10^(i-1)) * 10^(n-i) 个,其中 k / 10^(i-1) 表示小于 k 的前 i-1 位数字,10^(n-i) 表示后面 n-i 位可以任意取值。
最后,我们只需要将 0 到 9 的数字分别代入上述公式,计算出它们在 11 到 n 中出现的次数,相加即可得到答案。
阅读全文