最高有效位的第N个数字

问题描述 投票:0回答:1

我想编写一个函数int returnNthDigit(long long int number, int position) {},使其从左侧返回第N个位置数字。例如returnNthDigit(45006, 1);必须返回4。类似地,returnNthDigit(45006, 2);必须返回5。我不允许使用任何循环语句。这是我通过使用循环想到的一种解决方案。

#include <iostream>
#include <math.h>

int returnNthDigit(long long int number, int position)
{
    int numberOfDigits = log10(number) + 1;
    int iteration = numberOfDigits - position;
    while (iteration != 0)
    {
        number = number / 10;
        --iteration;
    }
    return number % 10;
}

int main() {
    std:: ios_base::sync_with_stdio(false);
    std:: cout << returnNthDigit(230045, 5);
    return 0;
}

我能做得更好吗?

c++ algorithm c++11 numbers
1个回答
1
投票

如果您被允许使用日志/战俘功能,您将关闭。考虑输入123:

int log_base10 = log10(number); // returns 2;
int divide_by = pow(10, log_base10 - index - 1); // returns 10 if index == 2;
int answer = (number/divide_by) % 10;  // returns 2;

尽管要小心log和pow,因为您正在从浮点转换为整数。

您本质上是在“砍掉”最低位的数字,然后使用% 10操作检查最低位的数字。

如果可以使用字符串,则更简单:

auto str = std::to_string(number);
int answer = str[position-1] - '0';
© www.soinside.com 2019 - 2024. All rights reserved.