определить, какая цифра стоит в разряде с номером i

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main() {
    long long int numb;
    int count;
    cout << "enter number: ";
    cin >> numb;
    int n = 0;
    for (; numb > 0; n++) {
        numb /= 10;
    }
    
    cout << n << endl;

    int i, digit=0;
    cout << "enter i: ";
    cin >> i;
    digit=  (numb / pow(10, i)) % 10;
    cout << "digit = " << digit;
    return 0;

}

нужно определить, какая цифра стоит в разряде с номером i (разряды нумеруются с конца, т.е. разряд единиц имеет номер 0). в моём случае digit всегда равняется нулю. Как это исправить?


Ответы (1 шт):

Автор решения: Qwertiy
digit=  (numb / pow(10, i)) % 10;
digit = (numb / (long long)pow(10, i)) % 10;

Предупреждение: оказывается, некоторые компиляторы используют функцию pow, вычисляющую подобное возведение в степень неточно, даже несмотря на то, что все точные значения представимы в типе double. Поэтому вместо использования функции pow стоит либо сделать свою функцию, работающую с целыми числами, либо сохранить степени 10 в массив.

А ещё лучше просто делить число на 10 заданное количество раз.

→ Ссылка