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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二次讲课内容(函数和快速幂)

發(fā)布時間:2024/4/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二次讲课内容(函数和快速幂) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)

在c語言中 main() 就是一個函數(shù),它是程序的主函數(shù)。

函數(shù)定義的一般格式:

返回類型 函數(shù)名(參數(shù)列表){函數(shù)體 }

返回類型

  • 一個函數(shù)可以返回一個值,返回類型就是對應(yīng)的值的類型。常見的有int、long long、bool、double、float,如果函數(shù)沒有返回值就用void

函數(shù)名

  • 自定義名稱
  • 字母、數(shù)字、下劃線混合使用,但是只能以字母或下劃線開始

參數(shù)列表

  • 傳遞參數(shù)時要和參數(shù)列表中的順序、數(shù)量、類型相對應(yīng)
  • 參數(shù)是可選的,函數(shù)可以不包含參數(shù)

函數(shù)體

  • 自定義的執(zhí)行語句

實例

自定義Max(),返回num1,num2中的最大值

int Max(int num1, int num2) {if (num1 > num2)return num1;elsereturn num2; }

函數(shù)聲明

  • 函數(shù)聲明告訴編譯器函數(shù)的名稱、如何調(diào)用函數(shù)

  • 一般格式為返回類型 函數(shù)名(參數(shù)列表);

  • 對于上面定義的 Max() 函數(shù),聲明函數(shù)為int Max(int num1, int num2);

  • 在函數(shù)聲明中參數(shù)的名稱不重要,參數(shù)的類型是必要的。因此也可以這樣聲明int Max(int, int);

函數(shù)的調(diào)用

函數(shù)定義之后,通過調(diào)用完成指定的操作, 當(dāng)程序調(diào)用函數(shù)時,程序就會執(zhí)行函數(shù)體中的語句直到執(zhí)行完畢return返回,這樣就完成了一次調(diào)用

#include <iostream> using namespace std; int Max(int num1, int num2) {if (num1 > num2)return num1;elsereturn num2; }int main() {int a = 10;int b = 20;// 調(diào)用函數(shù)并輸出結(jié)果cout << Max(a, b) << endl;return 0; }

小練習(xí)

  • 判斷閏年
  • 求圓的面積

快速冪

問題

ab%pa^{b} \%pab%p

思路

  • 最容易想到的是循環(huán)求值,循環(huán)操作b次每次乘以a,時間復(fù)雜度O(n)
int p = 10000007; int a = 2, b = 10; int ans = 1; for (int i = 1; i <= b; ++i) {ans = (ans * a) % p; } cout << ans << endl;
  • 當(dāng)指數(shù)很大的時候上面的方法就有些慢,這里我們就學(xué)習(xí)一下快速冪的方法

例如我們求
211=2(1011)2=28×1×24×0×22×1×21×1\begin{aligned} 2^{11} &amp;=2^{(1011)_{2}} \\&amp;=2^{8}\times1\times2^{4}\times0\times2^{2}\times1\times2^{1}\times1 \end{aligned} 211?=2(1011)2?=28×1×24×0×22×1×21×1?
通過觀察上式,我們可以將指數(shù)轉(zhuǎn)化為2進制,變量Ans記錄結(jié)果,變量T記錄當(dāng)前二進制對應(yīng)的值,不難發(fā)現(xiàn)二進值每高一位,對應(yīng)的T=T2\ T=T^{2}?T=T2,而二進制的狀態(tài)0和1表示是否要乘上T

typedef long long LL; LL quick_pow(LL a, LL b, LL p) {LL t = a;LL ans = 1;while (b) {if (b & 1) // 判斷當(dāng)前二進制是否為1ans = (ans * t) % p; // 如果為1更新anst = (t * t) % p; // 更新下一位的值,并把指數(shù)的二進制后移一位b >>= 1;}return ans; } 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的第二次讲课内容(函数和快速幂)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。