我正在执行自己的幂函数(请参见下文)。它可以工作,但输入仅进入循环一次,因此如果在主目录中我有:x=power(10, 3);
,则输出为100
而不是1000
。
你有什么主意吗?
预先谢谢你。
int power(int a, int b) {
int p=a;
for (int i=1; i<=b; i++) {
if ((b!=1) && (b!=0)) {
a= p*a;
}
if ((b=1)) {
a=a;
}
if ((b=0)) {
a=1;
}
}
return(a);
}
答案 0 :(得分:1)
这是一个更简单的版本(为了更好地理解):
int power(int a, int b)
{
int p=1; //CHANGE
for (int i=0; i<b; i++) //CHANGE
{
p= p*a; //CHANGE
}
return (p); //CHANGE
}
在您的代码中,主要错误是初始化p=a
,然后初始化a=p*a
-即使通过b
传递了 1 ,该值也会变成{{ 1}}(以100
为基数。
答案 1 :(得分:0)
b
和b=1
设置b=0
,而不是将b
与1或0进行比较i < b
而不是i <= b
。这是经过上述更正的代码
int power(int a, int b){
/* 1 times 1 is always 1 */
if(a == 1) return a;
/* any number to the 0 power is always 1 */
if(!b) return 1;
/* any number to the 1 power is always itself */
if(b == 1) return a;
int p = a;
for (int i = 1; i < b; i++){
a = p*a;
}
return a;
}
我对此here进行了0到10的2次幂测试。
答案 2 :(得分:0)
unsigned
gcc -O2
会为这两个函数生成完全相同的代码 unsigned power1(unsigned val, unsigned exp)
{
if (!exp) return 1;
return val * power1(val, exp-1);
}
unsigned power2(unsigned val, unsigned exp)
{
unsigned result = 1;
while (exp--) result *= val;
return result;
}
答案 3 :(得分:0)
输出为100,因为在第二和第三条if语句中,您分配给b变量新数字。
int power(int a, int b){
int p=a;
for (int i=1; i<b; ++i){
if((b!=1) && (b!=0)){
a= p*a;
}
if ((b==1)){
a=a;
}
if ((b==0)){
a=1;
}
}
return(a);
}