我一直在尝试使用以下简单代码进行函数调用,但不知怎的,它给了我一条错误信息,说%运算符是二元运算符,它不适用于中间体
int getDigit(int num, int index)
{int temp;
temp = num%pow(10,index);
return (temp)}
前提条件:num - 正整数,索引查找索引的数字(例如num = 6947,index = 3,return = 9
请指教, 我真的没想到会长期困在这里。
答案 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;
}
我认为可以通过使用模板元编程生成数组来推广它,但我会坦白并承认我并不擅长这些东西。我很难找到一个好的终止条件。