%运算符不使用整数变量

时间:2016-10-17 23:18:27

标签: c++ operators

我一直在尝试使用以下简单代码进行函数调用,但不知怎的,它给了我一条错误信息,说%运算符是二元运算符,它不适用于中间体

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

前提条件:num - 正整数,索引查找索引的数字(例如num = 6947,index = 3,return = 9

请指教, 我真的没想到会长期困在这里。

2 个答案:

答案 0 :(得分:0)

VS告诉%%不能加倍

这通常编译:

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

答案 1 :(得分: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;
}

我认为可以通过使用模板元编程生成数组来推广它,但我会坦白并承认我并不擅长这些东西。我很难找到一个好的终止条件。