当前位置: 面试刷题>> 第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
```
以上代码均实现了题目要求的功能,并提供了简单的测试示例。在实际应用中,可以根据需要调整错误处理的方式。