面试OR笔试9——1121231234

来源:互联网 发布:淘宝怎么搜好看的衣服 编辑:程序博客网 时间:2024/06/09 14:23

1 题目及要求

1.1 题目描述

0-9的整数按照这样的规律排列:第一个数为1,第2-3个数为1, 2,第4-6个数为1, 2, 3,第7-10个数为1, 2,3, 4。。。。。。。连在一起是1121231234。。。。。。。123456789101112131415。。。。。。。求第n个数是多少。

 

2 解答

2.1 代码

两种方法实现:

int getNum1(int n){if (n < 1) return 0;stringstream ss;for (int k1(1);ss.str().length() < n;++k1)for (int k2(1);k2<=k1 && ss.str().length() < n;++k2)ss << k2;string s1 = ss.str();return s1[n-1]-'0';}int getNum(int n){if (n < 1) return 0;int sum(0),mn(0),base(10),basen(1);while(sum < n){n -= sum;++mn;sum = 0;base = 10;basen = 1;while(base <= mn){sum += basen*(base-base/10);++basen;base*=10;}sum += basen*(mn+1 - base/10);}base = 1;basen = 0;sum = 0;while(sum < n){n-=sum;++basen;base *= 10;sum = basen*(base-base/10);}int num1 = base/10+n/basen;int num2 = n%basen;if(!num2) return (num1-1)%10;for(int k1(0); k1 <num2;++k1) base /= 10;return num1 / base % 10;}