【问题标题】:Power function in a loop循环中的幂函数
【发布时间】:2015-06-02 20:12:20
【问题描述】:

我在编写幂函数方面需要帮助。所以,我需要写一个 porogramm,它会在一个循环中输出一个从 1 到 10 的表格。不使用 POW 或 EXP 输出示例:

0^0 == 1
1^1 == 1
2^2 == 4
3^3 == 27
4^4 == 256
(and so on, up to)
10^10 == 10000000000

不使用 Cmath(没有 POW 或 EXP)

例如:

例如power( 3.0, 5 ) 将返回 243 因为 3*3*3*3*3 是 243 例如power(173, 0) 将返回 1,因为任何数字的 0 次方都是 1。

我做了这个简单的循环,但我不知道如何在其中插入幂公式。我也在考虑while循环

#include <iostream>
#include <string>
using namespace std; 

int main(){

    int number = 0, tot;

    for (int table = 0; table < 10; table++)
    {
        tot = number * table;
        cout << tot << endl;
        number++;
    }    
}

【问题讨论】:

  • 您可以create your own function 并在其中使用existing loop types in c++ 之一创建您需要的循环(例如:for loop)。
  • 创建一个可以乘以 3*3*3*3*3 的循环
  • @GermanMoiseenkov 太棒了!请使用您的解决方案编辑您的帖子,以及您特别坚持的问题,我们很乐意提供帮助。
  • 旁注:您的样本数据是整数,只有

标签: c++ loops


【解决方案1】:

这是一个递归函数,可以计算一个整数幂的值

double power(double base, unsigned int exp)
{
    if (exp == 0)
    {
        return 1.0;
    }
    else
    {
        return base * power(base, exp - 1);
    }
}

这样做的迭代方法是

double power(double base, unsigned int exp)
{
    double product = 1.0;
    for (unsigned int i = 0; i < exp; ++i)
    {
        product *= base;
    }
    return product;
}

您可以使用类似的方法测试任一方法

int main()
{
    std::cout << power(5, 3);
}

输出

125

【讨论】:

    【解决方案2】:

    我想你现在已经知道自己问题的答案了,但仍然;一些提示:

    1. Exponentiation 是基数的重复乘法,重复次数由指数定义。
    2. 在 C++ 或任何现代编程语言中,循环允许重复某些代码块:如果事先知道迭代次数,则使用 for 循环,否则使用 while 循环。

    结合这两个提示:您需要使用循环来重复乘法;重复(或迭代)的数量是预先知道的,因此,for 循环将是最好的。


    int exponentiation(int base, int exponent) {
        int result = 1;
        for (int i = 0; i < exponent; ++i)
            result = result * base;
        return result;
    }
    

    注意:这仅适用于正指数的整数幂运算!


    然后您可以在 for 循环中调用此函数,让它计算您想要的值:

    #include <iostream>
    
    int main(int argc, char** argv) {
        for(int i = 0; i <= 10; ++i)
            std::cout << exponentiation(i, i) << '\n';
    }
    

    【讨论】:

    • 我这样做了,它工作正常,但它输出的最后一个数字等于 141006540​​8,但 10^10 假设为 10000000000。它有什么问题?
    • 那是因为整数类型(int)溢出了;换句话说:10^10 太大而无法放入表示整数的 32 位中。您需要将所有 ints 替换为 long 才能在其中容纳更大的数字。
    • long intlong 在大多数现代机器上是 64 位;使用它,您将能够在再次溢出之前计算多达 15^15。 More info on integer overflow here.
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 2018-10-11
    • 2010-11-29
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多