在题目中带来模版总结
#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
#define FOR(i, j, k) for(int i(j); i <= (k); ++i)
#define ROF(i, j, k) for(int i(j); i >= (k); --i)
#define pii std::pair<int,int>
#define pll std::pair<ll, 1l>
#define ALL(v) (v).begin(),(v).end()
using unl = __int128_t;
using namespace std;
using ll = long long;
class TransForm { //进制转换
public:
string intToA(int n, int radix) { // n是待转换的数字 radix 进制 10 是指定的进制
if (n == 0) return "0"; // 当n为0时,直接返回"0"
string ans = "";
do {
int t = n % radix; //取模权重
if (t >= 0 && t <= 9) ans += t + '0'; // 这个是用于 2 - 10 进制内的进制转换 转换为字符串
else ans += t - 10 + 'A'; //大于10进制转换为字母所以要 + 'A' 转换为字符串
n /= radix;
} while (n > 0);
reverse(ans.begin(), ans.end());
return ans;
}
public:
long int AToB(string s,int radix) {
return strtol(s.c_str(), nullptr, radix);
}
public:
void MAIN() {
int n,m; // n为转换为m进制
string s; cin >> n >> s >> m;
ll A = AToB(s,n); //n进制转换为10进制
string t = intToA(A,m); //10 进制转换为m 进制
cout << t << endl;
}
};
bool Find(ll n) {
std::string s = std::to_string(n); //数字转化为字符串,字符串转化为数字 ( -'0' ) 或者通过函数
if (s.find("233") != std::string::npos) return true; //KMP查找字符串
return false;
}
//思路提供:
//去重
// sort(ALL(ans));
// ans.erase(unique(ALL(ans)), ans.end());
// isdigit();判断是否为数字
//多个变量尽量通过关系用一个变量表示
class Solution {
public:
void solve() {
}
public: //最小公倍数
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
//最大公约数
int gcd(int a, int b) {
return b > 0 ? gcd(b,a % b) : a;
}
public:
int IsPrime(int n) //质数判断
{
int i;
if(n<2||(n!=2&&n%2==0))//n小于2或者n是不等于2的偶数,必然非素数
return 0;
else//这里n都是奇数
{//这里使用上面刚提到的写法,用i代替开根号的过程
for(i=3;i*i<=n;i+=2)//这里注意循环条件
{//2必然不是因子,从3开始,每次递增2,直到sqrt(n)为止
if(n%i==0)
return 0;
}
return 1;
}
}
public: //快速幂
int qmi(ll a, ll b, ll p) // 对 p 取模 a的b次幂
{
ll res = 1;
while(b)
{
if (b & 1) res = res * a % p;
a = (a * a) % p,b >>= 1;
}
return res;
}
};
signed main() {
std::cin.tie(0) -> std::ios::sync_with_stdio(false);
std::cout.tie(0) -> std::ios::sync_with_stdio(false);
#if Run
int _;std::cin>>_;while(_--) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
模版介绍:
1.进制转化部分
class TransForm { //进制转换
public:
string intToA(int n, int radix) { // n是待转换的数字 radix 进制 10 是指定的进制
if (n == 0) return "0"; // 当n为0时,直接返回"0"
string ans = "";
do {
int t = n % radix; //取模权重
if (t >= 0 && t <= 9) ans += t + '0'; // 这个是用于 2 - 10 进制内的进制转换 转换为字符串
else ans += t - 10 + 'A'; //大于10进制转换为字母所以要 + 'A' 转换为字符串
n /= radix;
} while (n > 0);
reverse(ans.begin(), ans.end());
return ans;
}
public:
long int AToB(string s,int radix) {
return strtol(s.c_str(), nullptr, radix);
}
public:
void MAIN() {
int n,m; // n为转换为m进制
string s; cin >> n >> s >> m;
ll A = AToB(s,n); //n进制转换为10进制
string t = intToA(A,m); //10 进制转换为m 进制
cout << t << endl;
}
};
上面的代码能将任意进制转化为任意进制(2 - 32)
2.最大公约数
//最大公约数
int gcd(int a, int b) {
return b > 0 ? gcd(b,a % b) : a;
}
3.最小公倍数
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
4.快速幂
int qmi(ll a, ll b, ll p){// 对 p 取模 a的b次幂
ll res = 1;
while(b)
{
if (b & 1) res = res * a % p;
a = (a * a) % p,b >>= 1;
}
return res;
}
5.质数判断
int IsPrime(int n) //质数判断
{
int i;
if(n<2||(n!=2&&n%2==0))//n小于2或者n是不等于2的偶数,必然非素数
return 0;
else//这里n都是奇数
{//这里使用上面刚提到的写法,用i代替开根号的过程
for(i=3;i*i<=n;i+=2)//这里注意循环条件
{//2必然不是因子,从3开始,每次递增2,直到sqrt(n)为止
if(n%i==0)
return 0;
}
return 1;
}
}
包含各式计算方法 + 助力力竞赛拿高分