一些常用math函数
floor(x):向下取整
ceil(x):向上取整
pow(a, b):求a的b次方
sqrt(x):求根号
log(x):即求lnx,若要求以a为底的,则必须利用公式:lnb/lna 来替换
pi的精确定义为acos(-1.0)
一些常用的字符串函数
sscanf(A.c_str()+i,"%d",KA);//把数字型字符串转化为数字
strstr(a,b);//返回a字符串从b第一次出现的位置开始到a结尾的字符串
strcpy(a,b)//b复制到a里,包括b的字符串结尾
strncpy(a,b,10);//b字符串赋值前10个到a里
strcmp("a","A");//'a'>'A',所以值>0
string a="hello".substr(1,3);//a="ell"
//此外,字符串的相加直接用string写,即
a+=b;//即把b字符串加在a后面,但是没有字符串的相减
常用到的小型函数
1.判断素数。(散列中常用的nextprime稍加改造即可)
bool is_Prime(int n){
if(n <= 1) return false;
int sqr = (int)sqrt(n * 1.0);
for(int i=2; i<=sqr; i++)
if(n % i == 0)
return false;
return true;
}
2.最大公约数:辗转相除,记住gcd(a, b) = gcd(b, a%b);
int gcd(int a, int b){
if(b == 0)
return a;
else
return gcd(b, a % b);
}
3.分数:结构体、化简及减法
int gcd(int a, int b){
if(b==0) return a;
return gcb(b, a % b);
}//约分需要最小公约数,与最小公倍数的乘积=ab
struct Fraction{
int up, down;//分子 分母
};
Fraction reduction(Fraction res){
if(res.down < 0){//规则1:负号只放在分子
res.down = -res.down;
res.up = -res.up;
}
if(res.up == 0)//规则2:分母不为0
res.down = 1;
else{
int k = gcd(abs(res.up), abs(res.down));//规则3:化简(分子分母没有1之外的公约数),注意abs
res.up /= k;
res.down /= k;
}
return res;
}
Fraction minu(Fraction a, Fraction b){ //分数减法
Fraction res;
res.up = a.up*b.down - a.down*b.up;
res.down = a.down * b.down;
return reduction(res);//加、乘除法都类似,返回化简函数
}
易错点
1.unordered_set中元素的排列顺序和插入顺序无关
#include<unordered_set>
using namespace std;
int main()
{
unordered_set<int>S;
for (int i = 1; i < 100000; i += 12345)
S.insert(i);
for (auto it : S)
printf("%d\n", it);
输出
74071
1
12346
24691
37036
61726
49381
86416
98761
}
2.更新中