鱼C论坛

 找回密码
 立即注册
查看: 5134|回复: 17

题目40:找出这个无理数的小数部分的第n位

[复制链接]
发表于 2022-1-6 21:11:30 | 显示全部楼层
本帖最后由 guosl 于 2022-1-6 21:18 编辑
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. using namespace std;

  5. int f[] = { 0,9,2 * 90,3 * 900,4 * 9000,5 * 90000,6 * 900000 };//f[i]记录i位数的个数
  6. int g[] = { 0,1,10,100,1000,10000,100000 };//记录i位数的第一个数

  7. int getDigit(int k)
  8. {
  9.   int nCount = 0, i;
  10.   for (i = 1; i <= 6; ++i)//找出k是几位数
  11.   {
  12.     if (nCount + f[i] >= k)
  13.       break;
  14.     nCount += f[i];
  15.   }
  16.   k -= nCount;//计算k在i位数中的位置
  17.   int n = g[i] + k / i - 1, m = k % i;//计算出具体的数
  18.   //输出具体的数字
  19.   char str[12];
  20.   int nL;
  21.   if (m == 0)
  22.   {
  23.     _itoa_s(n, str, 10);
  24.     nL = strlen(str);
  25.   }
  26.   else
  27.   {
  28.     _itoa_s(n + 1, str, 10);
  29.     nL = m;
  30.   }
  31.   return int(str[nL - 1] - 48);
  32. }

  33. int main(void)
  34. {
  35.   int p = getDigit(1);
  36.   p *= getDigit(10);
  37.   p *= getDigit(100);
  38.   p *= getDigit(1000);
  39.   p *= getDigit(10000);
  40.   p *= getDigit(100000);
  41.   p *= getDigit(1000000);
  42.   cout << p << endl;
  43.   return 0;
  44. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-10 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表