2014-11-23 106 views
-1

我在制作一个帮助我的程序时遇到了这个问题。C++,数学指数

对于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; 
     } 
    } 

的主要代码是错误的,我知道这是肯定,但我不知道该怎么办it..please帮我,我只是一个C++初学者和试图自己学习语言。

+2

我想你想[代码审查(http://codereview.stackexchange.com/) – Barry 2014-11-23 15:25:17

+0

@Barry:不,他说: “主代码是错误的”... – Deduplicator 2014-11-23 15:33:13

+0

您拉入''但不使用['pow(base,exponent)'](http://www.cplusplus.com/reference/cmath/pow/ )功能? – 2014-11-23 15:33:57

回答

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,但是你真的不应该依赖于它)。

因此,您应该写入n=0而不是i=0

如何,如果你没有使用全局变量它可能已经看过:

int main() { 
    long s = 0; 
    for (int n = 0; n <= 2; ++n){ 
     s += f(n); 
     cout << s <<endl; 
    } 
} 
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; 
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. 
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; 
}