函数
在c语言中 main() 就是一个函数,它是程序的主函数。
函数定义的一般格式:
返回类型 函数名(参数列表){
函数体
}
返回类型
- 一个函数可以返回一个值,返回类型就是对应的值的类型。常见的有int、long long、bool、double、float,如果函数没有返回值就用void
函数名
- 自定义名称
- 字母、数字、下划线混合使用,但是只能以字母或下划线开始
参数列表
- 传递参数时要和参数列表中的顺序、数量、类型相对应
- 参数是可选的,函数可以不包含参数
函数体
- 自定义的执行语句
实例
自定义Max(),返回num1,num2中的最大值
int Max(int num1, int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
函数声明
-
函数声明告诉编译器函数的名称、如何调用函数
-
一般格式为
返回类型 函数名(参数列表);
-
对于上面定义的 Max() 函数,声明函数为
int Max(int num1, int num2);
-
在函数声明中参数的名称不重要,参数的类型是必要的。因此也可以这样声明
int Max(int, int);
函数的调用
函数定义之后,通过调用完成指定的操作, 当程序调用函数时,程序就会执行函数体中的语句直到执行完毕return返回,这样就完成了一次调用
#include <iostream>
using namespace std;
int Max(int num1, int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
int main() {
int a = 10;
int b = 20;
// 调用函数并输出结果
cout << Max(a, b) << endl;
return 0;
}
小练习
- 判断闰年
- 求圆的面积
快速幂
问题
求
思路
- 最容易想到的是循环求值,循环操作b次每次乘以a,时间复杂度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;
- 当指数很大的时候上面的方法就有些慢,这里我们就学习一下快速幂的方法
例如我们求
通过观察上式,我们可以将指数转化为2进制,变量Ans记录结果,变量T记录当前二进制对应的值,不难发现二进值每高一位,对应的
,而二进制的状态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) // 判断当前二进制是否为1
ans = (ans * t) % p; // 如果为1更新ans
t = (t * t) % p; // 更新下一位的值,并把指数的二进制后移一位
b >>= 1;
}
return ans;
}