如何实现没有`pow`的^ b?

时间:2018-05-08 14:24:21

标签: c

我需要编写一个函数来计算^ 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);
}

2 个答案:

答案 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