最高有效数字侧的第N位

Nth digit from Most significant digit side

本文关键字:有效数字      更新时间:2023-10-16

我想写一个函数int returnNthDigit(long long int number, int position) {},使它从左侧返回第N位数字。例如CCD_ 2必须返回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;
}

我能做得更好吗?

如果允许您使用log/pow函数,那么您就可以了。考虑输入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';