日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[C语言练习题 7] 通过移位运算(<<)实现2的n次方的计算

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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次方的计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。