当前位置: 面试刷题>> 第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 示例代码

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 示例代码

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 示例代码

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

以上代码均实现了题目要求的功能,并提供了简单的测试示例。在实际应用中,可以根据需要调整错误处理的方式。

推荐面试题