2016-10-17 1 views
-4

Я пытался использовать этот следующий простой код для вызова функции, но почему-то это давало мне сообщение об ошибке, говоря, что оператор% является двоичным оператором, и это не для int.% оператор не работает с целыми переменными

int getDigit(int num, int index) 
{int temp; 
temp = num%pow(10,index); 
return (temp)} 

Предпосылки: NUM - положительное целое число, цифра index- индекса Finding (например Num = 6947, индекс = 3, возврат будет 9

Пожалуйста, посоветуйте, я действительно не ожидал, чтобы застревать . здесь для этого долгого времени

+0

Бинарный оператор, как в нем, имеет два операнда – Li357

+1

6947% (10 * 10 * 10) = 947. – user4581301

+0

Вы знаете, что делает оператор modulo? –

ответ

0

VS говорит право% не может быть двойной

Это компилируется нормально:

int getDigit(int num, int index) 
{ 
    int temp; 
    temp=num%static_cast<int>(pow(10, index)); 
    return (temp); 
} 
+0

Отлично. Он компилируется. Но как насчет плохой математики? – user4581301

+0

Для лучшего математического просмотра [здесь] (http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int) –

0

Я только пишу это, потому что другие ответы опасны неправильно.

Вот простой, медленный и дурак доказательство решение:

#include <iostream> 
#include<cmath> 
int getDigit(int num, int index) 
{ 
    // first shift index -1 digits to the right to position the indexth digit 
    while(--index) 
    { 
     num /= 10; 
    } 
    // now strip off everything after the indexth digit 
    num %= 10; 
    // could be negative, but we only want digit. Lose the sign 
    return std::abs(num); 
} 

int main() 
{ 
    std::cout <<getDigit(6947, 3) << std::endl; 
} 

Выход

9 

Вот быстрее, менее безопасным непереносимой решение, которое работает только с 32 битным целым числом ,

int divisors[] = 
{ 
    1, 
    10, 
    100, 
    1000, 
    10000, 
    100000, 
    10000000, 
    100000000, 
    1000000000, 
}; 
int getDigit32(int num, int index) 
{ 
    if (index <=10) 
    { 
     return std::abs((num/divisors[index -1])%10); 
    } 
    return -1; 
} 

Я думаю, что это может быть обобщено путем создания массива с шаблоном мета программирования, но я буду честен и признать, что я не очень хорошо в этом материале. Я изо всех сил пытаюсь найти хорошее условие завершения.

Смежные вопросы