一些C语言常用函数(后续会继续更新)
1.求质数
bool isprime(int num)
{
if(num < 2) return false;
for(int j = 2;j <= sqrt(num);j++)
{
if(num % j == 0)
{
return false;
}
}
return true;
}
2.快排
void qsort(int l,int r)
{
int i,j,mid;
i = l;
j = r;
mid = a[(l + r)/2];
do
{
while(a[j] > mid){
j--;
}
while(a[i] < mid){
i++;
}
if(i <= j)
{
swap(a[i],a[j]);
i++;
j--;
}
}while(i <= j);
if(m <= j)
{
qsort(l,j);
}
else if(i <= m)
{
qsort(i,r);
}
else
{
printf("%d",a[m+1]);
}
}
3.求最大公因数(辗转相除法)
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a % b);
}
4.日期模拟
#include <bits/stdc++.h>
#define MX 100005
using namespace std;
int b[] = {13,1,2,3,5,4,4,2,2,2};
int main() {
int cnt = 0;
for(int i = 2000; i <= 2024; i++) {
int cnt1 = 0,ant1 = i;
while(ant1 != 0) {
cnt1 = cnt1 + b[ant1 % 10];
ant1 = ant1 / 10;
}
for(int j = 1; j <= 12; j++) {
int cnt2 = 0,ant2 = j;
if(ant2 / 10 != 0) {
while(ant2 != 0) {
cnt2 = cnt2 + b[ant2 % 10];
ant2 = ant2 / 10;
}
} else {
cnt2 = cnt2 + 13 + b[ant2];
}
for(int k = 1; k <= 31; k++) {
if(i == 2024 && j == 4 && k == 14) goto end;
if(j == 1 | j == 3 | j == 5 | j == 7 | j == 8 | j == 10 | j == 12);
else if(j == 2) {
if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
if(k > 29) break;
} else {
if(k > 28) break;
}
} else {
if(k > 30) break;
}
int cnt3 = 0,ant3 = k;
if(ant3 / 10 != 0) {
while(ant3 != 0) {
cnt3 = cnt3 + b[ant3 % 10];
ant3 = ant3 / 10;
}
}
else {
cnt3 = cnt3 + 13 + b[ant3];
}
if(cnt1 + cnt2 + cnt3 > 50) {
cnt++;
}
}
}
}
end:
cout<<cnt<<endl;
return 0;
}
5.超大数定义和输出
typedef __int128 ll;
void print128(ll x){
if(x > 9) print128(x / 10);
putchar(x % 10 + '0');
}
6.二叉树深度搜索
void dfs(int root,int step){
if(root == 0) return;
mx = max(mx,step);
dfs(a[root].l,step+1);
dfs(a[root].r,step+1);
}