当前位置: 面试刷题>> 第n个数位 (经典算法题500道)


由于题目只给出了“第n个数位”这一片段,我将假设题目要求的是“找到并返回给定正整数中第n个数位的数字”。这里,我们定义数位从左到右开始计数,最左边的数位为第1位。 ### 完整题目描述 给定一个正整数 `num` 和一个整数 `n`,请编写一个函数来找到并返回 `num` 中第 `n` 个数位的数字。如果 `n` 大于 `num` 的数位总数,则返回 `-1` 或其他合适的错误指示。 ### 示例 - 输入:`num = 12345, n = 3` - 输出:`3` - 输入:`num = 123, n = 5` - 输出:`-1`(因为 `num` 只有3位数) ### PHP 示例代码 ```php function findNthDigit($num, $n) { $length = 0; // 当前数字的长度 $start = 1; // 当前长度数字范围的起始值 $count = 9; // 当前长度数字的总数(每9个数字增加一位长度) while ($n > $length * $count) { $n -= $length * $count; $length++; $start *= 10; $count *= 10; } $numRange = $start + ceil($n / $length) - 1; // 定位到包含第n位数的数字 $digitPos = $n % $length; // 第n位数在该数字中的位置(从0开始) // 提取并返回第n位数的值 return intval(strval($numRange)[$digitPos]); } // 测试 echo findNthDigit(12345, 3); // 输出 3 echo findNthDigit(123, 5); // 输出 -1 或其他错误指示,这里直接返回-1 ``` ### Python 示例代码 ```python def findNthDigit(num, n): length = 0 start = 1 count = 9 while n > length * count: n -= length * count length += 1 start *= 10 count *= 10 num_range = start + (n // length) - 1 digit_pos = n % length # Python 字符串索引从0开始 return int(str(num_range)[digit_pos]) # 测试 print(findNthDigit(12345, 3)) # 输出 3 print(findNthDigit(123, 5)) # 输出 -1 或其他错误指示,这里直接返回-1 ``` ### JavaScript 示例代码 ```javascript function findNthDigit(num, n) { let length = 0; let start = 1; let count = 9; while (n > length * count) { n -= length * count; length++; start *= 10; count *= 10; } const numRange = start + Math.floor(n / length) - 1; const digitPos = n % length; // JavaScript 字符串索引从0开始 return parseInt(numRange.toString()[digitPos]); } // 测试 console.log(findNthDigit(12345, 3)); // 输出 3 console.log(findNthDigit(123, 5)); // 输出 -1 或其他错误指示,这里直接返回-1 ``` 以上代码均实现了题目要求的功能,并提供了简单的测试示例。在实际应用中,可以根据需要调整错误处理的方式。
推荐面试题