在没有math.h的情况下计算幂和基数的结果

时间:2016-04-20 06:47:34

标签: c

在我的大学,我被要求创建一个程序,要求用户输入两个输入。一个是基础,另一个是数字的力量。我不允许仅使用math.h循环。

到目前为止,这是我的代码:

#include <stdio.h>

int main() {
    int base;
    printf(" Please enter the base: ");
    scanf("%d", &base);

    int power;
    printf(" Please enter the power: ");
    scanf("%d", &power);

    printf("\n%d ^ %d is the same as...\n\n", base, power);

    printf(" %d", base);

    int reps;
    int number;
    for(reps = base; reps <= power; reps += 1) {
        printf("* %d ", base);
    }

    for(number; number <= power;number += 1) {
        int result = base * base;
        for (result; number <= power; result = base * result) {
            result = result * base;
            printf("\n or  %d", result);
        }
    }


    return 0;
}

请帮帮我。我迷失了,我想哭:(不重要。

4 个答案:

答案 0 :(得分:4)

(您的主要问题是您使用的是未初始化的变量;在C中执行此操作的行为未定义。)

但是让我们回答这个问题。首先要做的是将实际功率功能与所有输入和输出分开。关于这个功能,我会把自己喜欢的方式放到答案池中,理解是你要仔细研究并理解它。

您可以通过平方使用名为指数的技术来解决此问题:

int getPower(int base, int power/*must be non-negative*/)
{
    int ret = 1;
    while (power){
        if (power & 1){ /*this means the current value of `power` is odd*/
            ret *= base;
        }
        power >>= 1; /*ToDo - figure this out with your debugger*/
        base *= base;
    }
    return ret;
}

该方法在https://en.wikipedia.org/wiki/Exponentiation_by_squaring

中得到了充分说明

答案 1 :(得分:0)

计算功率的循环如下所示

int product = 1;
for(int multiplicationCounter = 1;multiplicationCounter <= power; multiplicationCounter ++) {
    product *= base;
}
printf("Result is %d", product);

您可以将其集成到您的代码中,也许可以更改输出。 这应该取代你的整个第二个for循环。

答案 2 :(得分:0)

假设base和power都是正整数,

然后

int Result =1;
for (int i=0; i<=power;i++)
{
if(power==0)
Result=1;

Result =Result*base;
}

答案 3 :(得分:0)

这应该有效

#include <stdio.h>

int main()
{
     int base;
     printf(" Please enter the base: ");
     scanf("%d", &base);

     int power;
     printf(" Please enter the power: ");
     scanf("%d", &power);

     printf("\n%d ^ %d is the same as...\n\n", base, power);

     printf(" %d", base);

     int reps;
     int number;
     int result=1:


        for(number=1; number <= power;number += 1)
        {
            result=result*base
        }

     printf("The result is %d", result);
     return 0;

}