coder须知——一些常用小知识

coder须知——一些常用小知识

一、常用函数
1、<math.h>库 / < cmath > 库:
(1)double sin(double x) 返回弧度角 x 的正弦
(2)double cos(double x) 返回弧度角 x 的余弦
(3)double log10(double x) 返回 x 的常用对数(基数为 10 的对数)
(4)double log(double x) 返回 x 的自然对数(基数为 e 的对数)
(5)double pow(double x, double y) 返回 x 的 y 次幂
(6)double sqrt(double x) 返回 x 的平方根
(7)double fabs(double x) 返回 x 的绝对值
(8)int abs(int n) 返回x的绝对值
fabs和abs都是求绝对值的,一个求的是浮点数的绝对值,一个求的是整型的绝对值

区别:<math.h>库 和 < cmath > 库
另外,两个库里面的函数其实都差不多的,但是< cmath > 库是C++标准库,而C++标准库中的函数或者对象都是在命名空间std中定义的,所以这就需要在使用前标明它的命名空间std
用 “::” 也可以指定所使用的变量的命名空间,“::”操作符是域解析操作符。
在使用std命名空间中的函数和对象是有三种使用方法(以< cmath >为例):

①最常见的方法,在开头使用“using namespace std:”,皆大欢喜,一切都OK了

②对cmath中的某一个函数单独进行声名再使用

#include <iostream>
using std::cin;

③ 只包含相关头文件,调用头文件中的函数及对象时都加上std::前缀,例如

//#include<cmath>——最前面包含进了头文件
std::cout<<std::abs(-2)<<std::endl;//之后调用的每一个std里面的东西都要在前面加上std::的前缀

2、< stdio.h >库:

常用的scanf和printf都在里面,还有求变量字节长度的sizeof函数

3、<string.h>库:
(1)char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
(2)int strcmp(const char *str1, const char str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较,完全相同返回0,str1大于str2则返回正整数,str1小于str2则返回负整数。
(3)size_t strlen(const char str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
(4)void memset(void s, int ch, size_t n):初始化函数,将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。是一种对结构体或者数组初始化较快的方法。
**例如:如果要把一个char a[20]清零,代码 memset(a,0,20
sizeof(char));这是一种不用循环的快捷方法,很常用。注意memset函数是根据字节来赋值的,所以如果数组类型不是char(char型字符所占字节数为1),就要用sizeof操作符。
其他用法:memset(buffer,’
’,strlen(buffer));(buffer是字符数组)

4、<stdlib.h>库:
(1)将字符串转化为整型、长整型和浮点数的一系列函数:
①int atoi(const char *str):把参数 str 所指向的字符串转换为一个整数(类型为 int 型),如果没有有效转换,则返回0。判断执行到字符串中的第一个非数字字符 例如:

   int val;
   char str[20];
   
   strcpy(str, "98993489");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

   strcpy(str, "runoob.com");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

	char arr[30]="12345wer123ersdd45";
	val = atoi(arr);
	printf("字符串值 = %s, 整型值 = %d\n", arr, val);

运行结果为:

字符串值 = 98993489, 整型值 = 98993489
字符串值 = runoob.com, 整型值 = 0
字符串值 = 12345wer123ersdd45, 整型值 = 12345

② long int atol(const char *str)
把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
③ double atof(const char *str)
把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
(2)涉及指针的一些函数:free()释放内存空间;malloc()申请内存,并返回地址。

5、<ctype.h>库:
(1)int isalnum(int c),该函数检查所传的字符是否是字母和数字。
(2)int isalpha(int c) 该函数检查所传的字符是否是字母。
(3)int islower(int c) 该函数检查所传的字符是否是小写字母。
(4)int isupper(int c) 该函数检查所传的字符是否是大写字母。
以上这些其实虽然参数都是int型的,但是在使用时一般都是传字符进去,传参数的时候就会经历一个类型转换的过程。

6、<bits/stdc++.h> 万能头文件:
既然是万能头,就是说包含了很多很多的库文件了,一般情况下我们只需要用这一个文件就可以把要用到的函数全部包括进来了。
那么,它具体包括哪些呢?

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>		//
#include <vector>		//向量
#include <queue>		//队列
#include <string>
#include <cstring>      
#include <map>			//
#include <stack>		//栈
#include <set>			//

就是这么的丰富多彩
但是,会听到一些师兄师姐说最好不要用这个库,这又是为什么呢?
因为有一些系统是不支持的,假设你只记住了这个头文件,结果发现,没法用,那就太惨了,已经想象到画面了。。。

7、< algorithm >库
(1)sort函数:sort(start,end,cmp)
start表示要排序数组的起始地址;end表示数组结束地址的下一位;cmp用于规定排序的方法,可不填,默认升序
示例:
1.最简单的用法(从头到尾排序,使用默认的升序)

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a[5]={1,4,5,2,3};
    sort(a,a+5);
    for(int i=0;i<5;i++)
        cout<<a[i]<<" ";
    return 0;
}

2.降序排列
(可以自己写一个比较函数)

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int a[5]={1,4,5,2,3};
    sort(a,a+5,cmp);
    for(int i=0;i<5;i++)
        cout<<a[i]<<" ";
    return 0;
}

稍稍做了一点小改动就完成啦!注意比较函数里面数据类型的对应!
(2)bool binary_search (ForwardIterator first, ForwardIterator last,const T& val, Compare comp) 用于查找指定区域内是否包含某个目标元素
binary_search() 底层实现采用的是二分查找的方式,因此该函数仅适用于“已排好序”的序列。所谓“已排好序”,并不是要求 [first, last) 区域内的数据严格按照某个排序规则进行升序或降序排序,只要满足“所有令 element<val(或者 comp(val, element)成立的元素都位于不成立元素的前面(其中 element 为指定范围内的元素)”即可。

#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9};
    bool flag=binary_search(a,a+10,3);
    cout<<flag<<endl;
    return 0;
}
\\返回结果
1

(3)max和min函数,找到两个数中最大/最小的元素

注意:sizeof是C语言中的一个操作符,不是函数,所以不要纠结是在哪一个库里面。
二、常用操作

1、求最大公因数:
(1)辗转相除法:**假设求的是a和b之间的最大公因数
下面展示一些 内联代码片

// 求a和b的最大公因数,且假设a>b,最后输出的a就是a和b的最大公因数
while(b!=0)
{
	b=a%b;
	a/=b;
}

2、将char型转为int型(例如将’1’转化为1):
(1)将char型字符转为int型之后(返回得到ASCII码值),再减去48,得到原本数字。

3、记住常用ASCII码值很重要!
0——48;9——57;A——65;a——97

4、模运算的基本操作:
(1)乘法:(ab) mod c=((a mod c)(b mod c) ) mod c
(2)幂运算:a^b )%c = ((a%c)^b)%c
(3)加法:(a + b) % p = (a % p + b % p) % p
(4)结合律:((a+b) % p + c) % p = (a + (b+c) % p) % p
   ((ab) % p * c)% p = (a * (bc) % p) % p
(5)分配律: ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p
(6)若a、b同余:(a≡b (% p))
① (a + c) ≡ (b + c) (%p)
② (a * c) ≡ (b * c) (%p)
③ a^n ≡ b^n (mod p)
5、大数运算:
(1)数据类型:
int型只讲数量级是10的9次方。
long long是64位,数量级上是10的19次。
(2)注意涉及到大数运算的时候一定要确保参与运算的数都是同一个类型!!!亲身经历、惨痛教训!int和long long放在一起会WA了!!!

6、求素数:
最简单的思路:对于任意一个大于等于3的数k,用k去除以从2到k-1的所有数,如果有任意一个可以整除,则不是素数。
简化:如果一个数可以被某个数整除,一定有一个小于等于k/2,另外一个大于k/2,那么就只需要判断k能否整除从2到k/2的所有数就可以了。

四、待补充的
对于小数的比较

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值