Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 2^不使用math.pow和乘法的幂_C++ - Fatal编程技术网

C++ 2^不使用math.pow和乘法的幂

C++ 2^不使用math.pow和乘法的幂,c++,C++,是否有任何方法可以在不使用math.pow或乘法运算符的情况下使用代码2^power。 到目前为止, 我曾想过使用2个计数器和加法器,但我的程序似乎不起作用。这是我迄今为止的工作 int counter=0; // k int userNumber=0; // p int power=0; int sum=0; cout << "Enter a non-negative number: "; cin >> userNumber; while (userNumbe

是否有任何方法可以在不使用math.pow或乘法运算符的情况下使用代码2^power。 到目前为止,

我曾想过使用2个计数器和加法器,但我的程序似乎不起作用。这是我迄今为止的工作

int counter=0; // k 
int userNumber=0; // p 
int power=0;
int sum=0;

cout << "Enter a non-negative number: ";
cin >> userNumber;


while (userNumber > counter)
{
    power +=2;
    counter++;
    power++;
}

sum = power - 1;
// post-condition: Sum = 2^p -1
cout << "The output is " << sum << endl;
return 0;
int计数器=0;//K
int userNumber=0;//P
整数幂=0;
整数和=0;
cout>userNumber;
while(用户编号>计数器)
{
功率+=2;
计数器++;
power++;
}
总和=幂-1;
//post条件:Sum=2^p-1

无法检查
ldexp
函数。

您可以通过位操作计算
2^n
。简单地做:

1 << n;

1这是面试问题吗?还是家庭作业?我之所以这么问,是因为我们在工作面试中遇到了这个问题。有一个非常简单的答案,基于一个相对模糊的C++特征,但是如果你应该自己猜……SevalaleSeyEV:我敢说你需要提出更具洞察力的面试问题。你会惊讶有多少人不及格。另外,。我会雇佣任何一个不正确的程序员,只是为了在下一秒解雇他或她。现在,正确处理除以2和位移位的细微差别,那是另外一回事了。@SevaAlekseyev为什么在面试中询问模糊的语言相关“特征”很重要?@Chris Jester Young和math.pow()。对于FP来说,这个问题似乎比int更有趣(我的意思是对于int来说,这真的很简单),我假设我们将推广到浮点,因为math.pow是一个选项。而且因为整数的大小写没有意思。+1代表2k,现在您不必再获得编辑权限。:)我现在觉得自己很愚蠢;这很有道理!非常感谢你@纳曼:看来你不喜欢任何一个移位的答案。这是有原因的吗?这看起来更像是试图计算2*userNumber,而不是2^userNumber。因为电源初始化为零,所以总是生成零。@IronMensan这个程序生成2^userNumber。在每个循环中,pow是2^计数器,因为2^n=(2^(n-1)+2^(n-1))。您在留下该注释前3分钟对其进行了编辑。不酷,第一次发布时是一次可怕的失败。
   pow = 1;
   while(userNumber > counter){
        pow = pow+pow;
        counter++;
   }