题目:
数字按照0123456789101112131415161718192021…的顺序排列。第5位(从0开始计数)为5,第13位为1,第19位为4…… 求任意第n位对应的数字。
思路: 从 0~9的10个数是1位数 10~99是两位数 100~999是三位数
除了1位数之外 其他n位数 占据的顺序排列的位数都是从 pow(10,n-1)~9*pow(10,n-1)
通过确认目标输入 对应的位数范围 和gap 通过gap计算目标数字和偏移值
#include<iostream>
#include<sstream>
#include<math.h>
using namespace std;
int ResultOfSequence(int n){
int i=2;
int gap;
for(;n>0;i++){
n-=pow(10,i-1)*9*i;
if(n>0)
gap = n;
}
i--;
int offset=gap%i;//目标数的偏移值
int start=gap/i + pow(10,i-1); //目标数的起点
//格式转换 int转成string 随机访问偏移位
stringstream sstr;
sstr<<start;
string str;
sstr>>str;
cout<<str;
return str[offset]-'0';
}
int FindSequence(int n){
if(n<=0)
return 0;
if(n<10)
return n;
return ResultOfSequence(n-10);
}
int main(){
cout<<"请输入一个整数\n";
int target;
cin>>target;
cout<<"结果为:"<<FindSequence(target);
}