Nth di git со стороны Наиболее значимых di git - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу написать функцию int returnNthDigit(long long int number, int position) {} так, чтобы она возвращала N-ю позицию di git с левой стороны. Например, 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;
}

Могу ли я сделать лучше?

1 Ответ

1 голос
/ 25 февраля 2020

Если вам разрешено использовать функции 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, потому что вы конвертируете из чисел с плавающей точкой в ​​целые числа.

По сути, вы "обрезаете" самые нижние цифры и затем проверка наименее значимого di git с помощью операции % 10.

Если вы можете использовать строки, это проще:

auto str = std::to_string(number);
int answer = str[position-1] - '0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...