|
发表于 2022-1-6 21:11:30
|
显示全部楼层
本帖最后由 guosl 于 2022-1-6 21:18 编辑
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- int f[] = { 0,9,2 * 90,3 * 900,4 * 9000,5 * 90000,6 * 900000 };//f[i]记录i位数的个数
- int g[] = { 0,1,10,100,1000,10000,100000 };//记录i位数的第一个数
- int getDigit(int k)
- {
- int nCount = 0, i;
- for (i = 1; i <= 6; ++i)//找出k是几位数
- {
- if (nCount + f[i] >= k)
- break;
- nCount += f[i];
- }
- k -= nCount;//计算k在i位数中的位置
- int n = g[i] + k / i - 1, m = k % i;//计算出具体的数
- //输出具体的数字
- char str[12];
- int nL;
- if (m == 0)
- {
- _itoa_s(n, str, 10);
- nL = strlen(str);
- }
- else
- {
- _itoa_s(n + 1, str, 10);
- nL = m;
- }
- return int(str[nL - 1] - 48);
- }
- int main(void)
- {
- int p = getDigit(1);
- p *= getDigit(10);
- p *= getDigit(100);
- p *= getDigit(1000);
- p *= getDigit(10000);
- p *= getDigit(100000);
- p *= getDigit(1000000);
- cout << p << endl;
- return 0;
- }
复制代码 |
|