[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算
生活随笔
收集整理的這篇文章主要介紹了
[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目來源:2的n次方計算_牛客題霸_牛客網
描述
不使用累計乘法的基礎上,通過移位運算(<<)實現2的n次方的計算。
數據范圍:0<=n<31
輸入描述:
一行輸入整數n(0 <= n < 31)。
輸出描述:
輸出對應的2的n次方的結果。
示例1
輸入:
2
輸出:
4示例2
輸入:
10輸出:
1024代碼實現:
//位運算 int main() {int n = 0;scanf("%d", &n);//移位int sum = 1 << n;//或者int sum2 = 2 << (n - 1);printf("%d", sum);return 0; }代碼分析:
題目要求計算2的n次方的結果,我們當然首先會想到使用math函數中的pow函數,直接pow(2,n)就可以解決問題,代碼如下:
常規算法 int main() {int n = 0;scanf("%d", &n);int sum = pow(2, n);printf("%d", sum);return 0; }但是題目還有一個要求說:使用移位運算
那么顯然常規算法是不可以在這里使用的
我們首先來思考移位操作符是怎么操作一個數字的。
在之前操作符知道:
移位操作符:?>>? ?? <<
移位操作符:其實是作用于一個數的二進制數
?舉例我們可得知:
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; }?轉換成十進制,我們發現給一個數字左移一位就像給這個數字乘上了2
那么我們顯然可以得知,要計算2的n次方,我們可以給數字1的二級制數左移n位就得到了2的n次方
?因此我們用代碼實現:
//位運算 int main() {int n = 0;scanf("%d", &n);//移位int sum = 1 << n;printf("%d", sum);return 0; }?或者我們用數字2開始左移(n-1)位也是可以的
?到底和上面一樣
?測試:
示例1
輸入:
2
輸出:
4示例2
輸入:
10輸出:
1024?
?
?最后我們將代碼放在牛客網中發現也是沒問題的
?
結論:
本題的練習讓我們對左移操作符進行了復習,也讓我們掌握了一種非常規算法的2的n次方的求解方法,感興趣的小伙伴可以自己嘗試嘗試哦~
?2的n次方計算_牛客題霸_牛客網
如果各位小伙伴覺得對自己有所幫助的話 可以點贊收藏+關注哦~
總結
以上是生活随笔為你收集整理的[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【微信小程序系列】微信小程序连接后端数据
- 下一篇: oracle经典教程