leetcode:400. 第N个数字(数学)

题目:

leetcode:400. 第N个数字(数学)_第1张图片

分析:

位数-个数
1—9
2—90x2
3—900x3

先定他是几位数。
如果他是3位数,减去一位数的个数总和,减去一位数的个数总和,代表的就是从100开始他是第几个数了,除以3,则可以判断他是在从100开始的第几个数里面,再利用取余,就可以判断出他是这个数里面的第几个了。

代码:

int main()
{
 int n=17;
 long long A[11];
 //表示i位数一共有多少位,严格的 i位数,前面不能是0 
 //int 的最大值 2147483647
 for(int i=1;i<11;i++)
 {
  A[i]=9*pow(10,i-1)*i;
 }
 //定位数。
 int c=0;
 int all=0;
 for(int i=1;;i++)
 {
  all=all+A[i];
  c++;
  if(all==n) return 9;
  if(all>n) break;
 }
 if(c==1) return n;
 all=all-A[c];
 n=n-all;
 cout<<"c:"<<c<<endl;
 cout<<"n:"<<n<<endl;
 int t1=(n-1)/c;
 t1=t1+pow(10,c-1);
 cout<<"t1: "<<t1<<endl;
 int t2=n%c;
 if(t2==0) {
  return t1%10;
 }
 cout<<"t2: "<<t2<<endl;
 int t3=c-t2;
 cout<<"t3: "<<t3<<endl;
 cout<<(int)(t1/pow(10,t3))%10; 
 return (int)(t1/pow(10,t3))%10; 
 } 

你可能感兴趣的:(数学)