我需要编写一个函数来计算^ b但我不允许使用pow
。有任何想法吗?我搞不清楚了。
现在看来问题主要在于......
在某个地方它得到了vys是我的特征。所以,如果我在main中设置vys = 1,我会在输出中得到1 ..
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <unistd.h>
void multiplied(int b, int n)
{
int i=1, vys=1;
while (i<=n)
{
vys *=b;
i++;
}
return vys;
}
main(void)
{
int b=0, n=0, vys=1;
printf("Give numbers b and n but they must be in interval <0,10>!\n");
scanf("%d %d", &b, &n);
if ((b < 0 || b>10) || (n<0 || n>10))
{
printf("Numbers are not in interval <0,10>!\n");
}
else
{
printf("Number is in interval so i continue...\n");
sleep(2);
vys= multiplied(&b, &n);
printf("%d", vys);
}
答案 0 :(得分:1)
让我们明确一点。
首先,这个
void multiplied(int *b, int *n)
返回一个int,所以这样说。
int multiplied(int *b, int *n)
接下来,您在main中初始化变量:在此处执行相同操作。
int i, vys;
像这样:
int i=1, vys=1;
现在让我们来看看循环:
while (i<=n)
{
vys=*b**b;
i++;
}
目前,您正在循环中反复设置vys
。
你想增加,例如2,然后是2 * 2,然后是2 * 2 * 2,....如果你想要2的幂:
while (i<=n)
{
vys *= *b;
i++;
}
现在,您不需要传递指针。
int multiplied(int b, int n)
{
int i=1, vys=1;
while (i<=n)
{
vys *= b;
i++;
}
return vys;
}
修改:
请注意您何时致电该功能:
main(void)
{
int b=0, n=0, vys;
//input and checking code as you have it
multiplied(&b, &n); //<---- return ignored
printf("%d", vys); //<-- print uninitialsed local variable
}
改变你的最后两行:
vys = multiplied(&b, &n); //<---- return captured
printf("%d", vys); //<-- print returned variable
编辑2:
如果更改为在函数中使用int
而不是指针,则传递ints而不是其地址:
vys = multiplied(b, n); //<---- pass the ints not their addresses
printf("%d", vys); //<-- print returned variable, which should vary now
答案 1 :(得分:0)
这里有一个简单的代码:
#include <stdio.h>
long long intpow(int a, int b)
{
long long tempres = 1;
while(b--)
tempres *= a;
return tempres;
}
int main(void) {
printf("%lld\n", intpow(5,10));
return 0;
}
你需要更大的int来容纳结果。
您可以自己玩:https://ideone.com/4JT6NQ