是的,有几件事,首先其他人也在他们的回答中提到:
- 当您需要比较运算符时,您正在使用赋值运算符:
=
分配,==
比较。
- 分号是语句的结尾,
;
是一个空的但有效的语句,所以if(m ==0);
说:“如果 m 为 0,什么也不做”。您的for
循环也遇到了同样的问题。
- 正如我在评论中所说:如果您知道答案,为什么要分配:
if(m==0) result = 1;
有点多余,恕我直言,我只想写if (m == 0) return 1;
现在,别的东西:
你正在计算一个 int,以另一个 int 的力量计算。从技术上讲, 2^33 应该是“可计算的”,但 int 根本不够大。这是一个替代建议:
long long calc_power(int i, unsigned int exp)
{
long long result;
if (exp == 0) return 1;
result = i;
for (--exp;exp;--exp) result *= i;
return result;
}
我还删除了if (exp == 1)
, 作为循环的编写方式,它现在可以处理它。
值得解释的陈述:
long long calc_power(int i, unsigned int exp)
我稍微更改了函数的签名:它现在返回一个long long
值,以容纳更大的值, -function 的幂可能会返回。我还将第二个参数声明为unsigned int
,以避免不得不处理负面权力。你的函数还没有准备好,但你没有检查是否m < 0
,你只是假设它是有效的输入。
if (exp == 0) return 1;
注意:右括号后没有分号
result = i;
这会将 int 提升为一个long long
值,并自动将 i^1 分配给result
.
for(--exp;exp;--exp) result *= i;
这里发生了很多事情。首先,循环以 开始,与, 或--exp
相同。
循环继续的条件很简单。如果为 0,则计算结果为 false。假设为 1,则开始循环自动设置为 0,并且永远不会进入循环。如果大于 1,则循环继续,递减直到它也达到零。
在每次迭代中,计算其缩写。
完成所有这些后,返回一个值...exp -= 1
exp = exp -1;
exp
exp
exp
exp
exp
exp
result *= i;
result = result * i
return result
long long
正如 H2CO3 所指出的,这个片段可以进一步简化:
long long calc_power(int i, unsigned int exp)
{
long long result = 1;//assign 1
for (;exp;--exp) result *= i;
return result;
}
而不是检查 a exp == 0
,只需从一开始就分配 1 result
,然后从那里取东西就可以了……
请注意,这for(;exp;--exp)
不是错字。第一个分号必须存在,但那里没有需要评估的表达式。如果你找到for (exp;exp;--exp)
,那也有效。
注意:
这个函数绝不是“准备好生产”,这只是一个如何计算的基本示例i1^i2
,对于一个更完整的pow
函数示例,看看这里,看看你是否可以计算出代码作品。不过,您可能需要更多信息,也许还需要一本关于 C 语言的书