[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算
題目來(lái)源:2的n次方計(jì)算_牛客題霸_??途W(wǎng)
描述
不使用累計(jì)乘法的基礎(chǔ)上,通過(guò)移位運(yùn)算(<<)實(shí)現(xiàn)2的n次方的計(jì)算。
數(shù)據(jù)范圍:0<=n<31
輸入描述:
一行輸入整數(shù)n(0 <= n < 31)。
輸出描述:
輸出對(duì)應(yīng)的2的n次方的結(jié)果。
示例1
輸入:
2
輸出:
4示例2
輸入:
10輸出:
1024代碼實(shí)現(xiàn):
//位運(yùn)算 int main() {int n = 0;scanf("%d", &n);//移位int sum = 1 << n;//或者int sum2 = 2 << (n - 1);printf("%d", sum);return 0; }代碼分析:
題目要求計(jì)算2的n次方的結(jié)果,我們當(dāng)然首先會(huì)想到使用math函數(shù)中的pow函數(shù),直接pow(2,n)就可以解決問(wèn)題,代碼如下:
常規(guī)算法 int main() {int n = 0;scanf("%d", &n);int sum = pow(2, n);printf("%d", sum);return 0; }但是題目還有一個(gè)要求說(shuō):使用移位運(yùn)算
那么顯然常規(guī)算法是不可以在這里使用的
我們首先來(lái)思考移位操作符是怎么操作一個(gè)數(shù)字的。
在之前操作符知道:
移位操作符:?>>? ?? <<
移位操作符:其實(shí)是作用于一個(gè)數(shù)的二進(jìn)制數(shù)
?舉例我們可得知:
int main() {int a = 3;int b = a << 1;printf("%d\n", b);// 00000000 00000000 00000000 00000011 --3//a<<1// 00000000 00000000 00000000 00000110 --6return 0; }?轉(zhuǎn)換成十進(jìn)制,我們發(fā)現(xiàn)給一個(gè)數(shù)字左移一位就像給這個(gè)數(shù)字乘上了2
那么我們顯然可以得知,要計(jì)算2的n次方,我們可以給數(shù)字1的二級(jí)制數(shù)左移n位就得到了2的n次方
?因此我們用代碼實(shí)現(xiàn):
//位運(yùn)算 int main() {int n = 0;scanf("%d", &n);//移位int sum = 1 << n;printf("%d", sum);return 0; }?或者我們用數(shù)字2開(kāi)始左移(n-1)位也是可以的
?到底和上面一樣
?測(cè)試:
示例1
輸入:
2
輸出:
4示例2
輸入:
10輸出:
1024?
?
?最后我們將代碼放在??途W(wǎng)中發(fā)現(xiàn)也是沒(méi)問(wèn)題的
?
結(jié)論:
本題的練習(xí)讓我們對(duì)左移操作符進(jìn)行了復(fù)習(xí),也讓我們掌握了一種非常規(guī)算法的2的n次方的求解方法,感興趣的小伙伴可以自己嘗試嘗試哦~
?2的n次方計(jì)算_??皖}霸_牛客網(wǎng)
如果各位小伙伴覺(jué)得對(duì)自己有所幫助的話 可以點(diǎn)贊收藏+關(guān)注哦~
總結(jié)
以上是生活随笔為你收集整理的[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【微信小程序系列】微信小程序连接后端数据
- 下一篇: oracle经典教程