C ++,数学指数

时间:2014-11-23 15:24:35

标签: c++ math

我在制作一个帮助我解决此问题的程序时遇到了这个问题。

对于n(n <= 25)。制作一个程序,计算并在屏幕上显示总和的值: S = 1+ 2+ 2(pow 2)+ 2(pow 3)+ ... + 2(pow n)。

我设法做的是:

#include <iostream>
#include <math.h>
using namespace std;
int i;
int n;
long s;

long f() {
    if (n=0) {
        return 1;
    }else if (n=1) {
        return 2;
    }else {
        return 2* (n-1); 
    }
}
    int main()  {
        for (i=0; n<=2;++n){
            s=s+f();
                cout << s <<endl;
        }
    }

主要代码是错误的我知道这肯定但我不知道该怎么做..请帮助我,我只是一个c ++ begginer并试图自己学习语言。

4 个答案:

答案 0 :(得分:0)

2(pow n)可能会写成1 << n

或者如果你想自己计算两个人的力量:

// compute manually (1 << n)
int power2(int n)
{
    int res = 1;
    for (int i = 0; i != n; ++i) {
        res *= 2
    }
    return res;
}

您的金额实际上是power2(n+1) - 1,所以您可以简单地写一下:

std::cout << ((1 << n + 1) - 1) << std::endl;

std::cout << power2(n + 1) - 1 << std::endl;

如果你想在循环中这样做:

unsigned int res = 0;
for (int i = 0; i != n; ++i) {
    res += power2(i);
}
std::cout << res << std::endl;

答案 1 :(得分:0)

这只是一个几何系列。几何级数的n项之和由下式给出: -

S(n) = a ( r^n - 1 )/ (r - 1 )

n = no. of terms.
r = common ratio.
a = first term.

所以,对你的例子......

a = 1.
r = 2.
n = no of terms you want to take sum.

答案 2 :(得分:0)

您只需要一个变量来保存当前的总和,另一个变量来保持2的幂:

int main()  
{
    const int n = 25;
    int pow2 = 1;
    int sum = 1;
    for (int i = 1; i <= n; i++)
    {
        pow2 *= 2;
        sum += pow2;
    }
    cout << sum << endl;
}

答案 3 :(得分:0)

你做错的具体事情......


int i;
int n;
long s;

不要使用像这样的全局变量。对于这个程序,你根本不需要全局变量。


long f() {
    if (n=0) {
        return 1;
    }else if (n=1) {
        return 2;
    }else {
        return 2* (n-1); 
    }
}

这里你使用的是递归,你应该使用循环。此外,n应该是传入的参数:

long f(int n) {
    long result = 1;
    for(int i = 0; i < n; ++i)
        result *= 2;
    return result;
}

甚至更好,不要重新发明方向盘并使用pow(2, n)代替f(n)


        for (i=0; n<=2;++n){
  1. 您设置了i但从未对其进行任何操作。
  2. 你永远不会初始化ns所以他们可能有随机值(虽然这些天编译器对人们更好,并将所有未初始化的全局变量设置为0,但你真的不应该依赖于)。
  3. 因此,您应该写n=0而不是i=0

    如果你没有使用全局变量,它怎么看?

    int main() {
        long s = 0;
        for (int n = 0; n <= 2; ++n){
            s += f(n);
            cout << s <<endl;
        }
    }