我想编写一个函数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;
}
我能做得更好吗?
如果您被允许使用日志/战俘功能,您将关闭。考虑输入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';