2014-11-23 68 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; 
}