我这个函数有问题,输出结果不正确
I have a problem with this function, the output results are incorrect
我正在尝试制作这样的东西:
2^1 + 2^2 + 2^3 + 2^4 + ... + 2^n
这是我的代码:
#include <iostream>
int main(){
int n, p=0;
std::cout<<"N: ";
std::cin>>n;
for(int i=1; i<=n; i++){
p = p+(2^i);
}
std::cout<<p;
return 0;
}
结果总是不正确。如果我输入 4,结果是 10 如果我输入 5,结果是 17
我认为问题出在 p = p+(2^i);
但我不确定。
在c++中^
是位运算符,不是幂符号。您应该使用标准库中的 pow()
函数。你应该检查这个 answer.
注意每一项都是 2 的幂,可以用左移运算符表示:
for (int i = 0; i < N; ++i)
{
p = p + (1 << i);
}
您还可以注意到,每一项都是前一项的 2 倍。
因此你也可以把它写成:
unsigned int term = 1;
unsigned int sum_of_terms = 0;
for (int i = 0; i < N; ++i)
{
sum_of_terms += term;
term *= 2;
}
编辑 1:异或真理 table
operator^
是**异或运算符。它适用于位。
这是基于两位的真相table:
X | Y | X ^ Y
------------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
我正在尝试制作这样的东西:
2^1 + 2^2 + 2^3 + 2^4 + ... + 2^n
这是我的代码:
#include <iostream>
int main(){
int n, p=0;
std::cout<<"N: ";
std::cin>>n;
for(int i=1; i<=n; i++){
p = p+(2^i);
}
std::cout<<p;
return 0;
}
结果总是不正确。如果我输入 4,结果是 10 如果我输入 5,结果是 17
我认为问题出在 p = p+(2^i);
但我不确定。
在c++中^
是位运算符,不是幂符号。您应该使用标准库中的 pow()
函数。你应该检查这个 answer.
注意每一项都是 2 的幂,可以用左移运算符表示:
for (int i = 0; i < N; ++i)
{
p = p + (1 << i);
}
您还可以注意到,每一项都是前一项的 2 倍。
因此你也可以把它写成:
unsigned int term = 1;
unsigned int sum_of_terms = 0;
for (int i = 0; i < N; ++i)
{
sum_of_terms += term;
term *= 2;
}
编辑 1:异或真理 table
operator^
是**异或运算符。它适用于位。
这是基于两位的真相table:
X | Y | X ^ Y
------------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0