int a = 0, b, c, e, n = 25;
e = n;
while(n!=0)
{
n=n/10;
a++;
}
printf("%d",a);
b = e * e;
c = b % (pow(10, a));
if(c==e)
printf("automorphic");
对于
行c=b%(pow(10,a));
编译器显示错误:
invalid operands of types `int' and `double' to binary `operator%'
答案 0 :(得分:7)
pow返回一个double,你不能在双打上使用%。
答案 1 :(得分:3)
pow返回一个double,您不能将其用作%。
的运算符尝试:
c=b%((int)pow(10,a));
代替。
答案 2 :(得分:2)
根据其他答案:pow
会在您的程序中引入双打,然后您可以将它们转换回整数。
最好避免问题,然后:
int a = 1;
while(n!=0)
{
n=n/10;
a *= 10;
}
a /= 10;
b=e*e;
c=b%a;
(编辑)我标记了一行“Fishy”,因为n=0..9
会发生什么?你可能需要
while (n >= 10)
..
(再次编辑,叹息)抱歉 - 上面的编辑错误,您需要总的位数。 a
需要在循环后进行调整。
答案 3 :(得分:0)
%
运算符只能用整数运算。 pow
函数返回double
,这就是您收到错误的原因。
答案 4 :(得分:0)
在C / C ++中,模数运算符(%
)仅限于整数。您可以使用fmod (...)
作为浮点模数,但仍需要匹配类型才能使用它。因此,无论您选择使用哪种解决方案,您都必须投射一个变量或表达式;我个人会使用整数模数。
这与Java和C#等语言形成对比,后者允许您在模数运算符的一侧使用整数,而在另一侧使用浮点数而没有任何问题。当从其他语言移植到C时,这可能是可移植性问题的根源。
答案 5 :(得分:0)
代码可以更正为:
int a = 0, b, c, e, n = 25;
e = n;
while(n!=0)
{
n=n/10;
a++;
}
printf("%d",a);
b = e * e;
/*
call to pow() function returns a double value and b is an integer type variable.
For any operation (here, modular division) the operands must be of same type.
So, the double value returned from call to pow() function must be explicitly
casted to int type as shown in the code below. Also, the first argument to pow()
must to be double (or, float) type. Here, 10 is integer type, correct it as 10.0.
The result will be fine.
*/
c = b % (int)(pow(10.0, a));
if(c==e)
printf("automorphic");