我在制作一个帮助我解决此问题的程序时遇到了这个问题。
对于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并试图自己学习语言。
答案 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){
i
但从未对其进行任何操作。n
或s
所以他们可能有随机值(虽然这些天编译器对人们更好,并将所有未初始化的全局变量设置为0,但你真的不应该依赖于)。因此,您应该写n=0
而不是i=0
。
如果你没有使用全局变量,它怎么看?
int main() {
long s = 0;
for (int n = 0; n <= 2; ++n){
s += f(n);
cout << s <<endl;
}
}