目录
- 前言
- 类型转换
- int 转 string
- string 转 int
- 进制转换
- 数学
- lowbit
- Miller-Rabin 判断素数
- 快速幂
- 最大公约数
- 最小公倍数
- 其它算法
- 并查集
- 结尾
本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser
前言
学完Python后再学C++,会有一种神奇的感觉,因为许多Python的内置函数用的很方便,但C++都没有,需要自己写,如整数和字符串的转换。这篇文章中,就一起看看常用函数的写法吧!
类型转换
int 转 string
网上有许多int和string互转的方法,但在我看来都挺繁琐。使用stringstream其实最方便。
#include<sstream> //必须导入sstream或bits/stdc++库
int to_int(string str){stringstream ss; //创建stringstream流int num;ss << str; //str流入stringstreamss >> num; //stringstream流入numreturn num;
}
string 转 int
#include<sstream> //必须导入sstream或bits/stdc++库
string to_str(long long int num){stringstream ss; //创建stringstream流string str;ss << num; //num流入stringstreamss >> str; //stringstream流入strreturn str;
}
进制转换
10进制转n进制( 2 ≤ n ≤ 16 , n ∈ Z 2\leq n\leq 16,n\in \mathbb Z 2≤n≤16,n∈Z)
用于将10进制的数转换位n进制。
string dec_to_m(int n,int m){ //十进制数n转m进制string digit = "0123456789ABCDEF"; //位数if(n == 0){ //如果除完了return "";}return dec_to_m(n / m,m) + digit[n % m]; //依次相除并添加位数
}
n进制转10进制( 2 ≤ n ≤ 16 , n ∈ Z 2\leq n\leq 16,n\in \mathbb Z 2≤n≤16,n∈Z)
用于将n进制的数转换为10进制。
long long int n_to_dec(string m,int base){ //base进制的数字mreverse(m.begin(),m.end()); //将数字反转过来,方便遍历long long int ans = 0; //十进制的数for(int i = 0;i < m.size();i++){ //遍历每一位int digit; //当前位if('0' <= m[i] and m[i] <= '9'){ //将字符转换为整数digit = m[i] - '0';}else if('A' <= m[i] and m[i] <= 'Z'){ //如果是16进制则需要处理字母digit = m[i] - 'A' + 10;}else if('a' <= m[i] and m[i] <= 'z'){ //如果是16进制则需要处理字母digit = m[i] - 'a' + 10;}ans += pow(base,i) * digit; //依次累加}return ans;
}
数学
lowbit
利用二进制的特性,可以将数字的二进制表示法最末尾的 1 1 1取出来。
int lowbit(int num){return num & (-num);
}
Miller-Rabin 判断素数
bool prime(long long int n){if(n <= 1){ //如果是1或0则不是素数return false;}for(long long int i = 2;i <= sqrt(n);i++){ //从2开始枚举到sqrt(n)if(n % i == 0){ //如果里面有n的因数则n不是素数return false; //可以结束函数的运行了}}return true; //是素数
}
快速幂
long long int fastpow(int a,int n){long long int ans = 1;while(n){if(n & 1){ //当前位需要乘ans *= a;}a *= a; //平方n = n >> 1; //将n右移一位}return ans;
}
最大公约数
int gcd(int a,int b){if(b){return gcd(b,a % b);}return a;
}
最小公倍数
int gcd(int a,int b){if(b){return gcd(b,a % b);}return a;
}int lcm(int a,int b){return a * b / gcd(a,b);
}
其它算法
并查集
const int N = 10005;
int s[N];
void init(){ //初始化for(int i = 1;i <= N;i++){s[i] = i;}
}
int find(int x){ //查找if(x != s[x]){s[x] = find(s[x]); //路径压缩}return s[x];
}void merge(int x,int y){x = find(x);y = find(y);if(x != y){s[x] = s[y];}
}
结尾
以上就是几个常用的C++模板了,也许在哪里会用到呢。
大家还想要什么模板呢?评论区见~
给个赞再走哦~