从1开始的数字,将数字都放到一个序列中,如1,2,3,4,5,6,7,8,9,10,11,12……成为序列"123456789101112..."。
现要查询其中的第n位。
从1增加到9会增加9次、每次1位、增加1轮
从10增加到99会增加9次、每次2位、增加10轮
从100增加到999会增加9次、每次3位、增加100轮
以此类推……计算出各个不同位数的数所在的区间。
参考了查找无限整数序列的第n位1,2,3,4,5,6,7,8,9,10,11,...这篇博客
#include <stdio.h>
int nthDigit(int n)
{
int digits = 1; //该位有几个数字
int base = 1; //什么位
int count = 9*base*digits;
/** 1.这个数字是几位数*/
while(n-count>0)
{
digits++;
n -= count;
base *= 10;
count = 9*base*digits;
}
/** 2.num表示是哪个数字*/
int index = n%digits; //是否正好是一个数字结束
if(index == 0)
{
index = digits;
}
int num = base+(index == digits ? n/digits-1:n/digits);
/** 3.计算第几位*/
//index表示该数字的第几个数
while(index<digits)
{
num /= 10;
index++;
}
return num%10;
}
int main()
{
int n;
scanf("%d", &n);
int ans = nthDigit(n);
printf("%d\n", ans);
}