- gcd
int gcd(int a,int b){ return b ? gcd(b,a%b) : a; } //lcm(a,b)=a*b/gcd(a,b);//直接使用__gcd(a,b);
- 快速幂
int pow_mod(int a, int n, int m) { long long ans = 1; while(n){ if(n&1){ ans = (ans * a) % m; } a = (a * a) % m; n >>= 1; } return ans; } - 进制转换
一般其他进制为 字符串,十进制为 整型
3.1 十进制 转 其他进制
思路:
把要转换的数,除以2(或其他),得到商和余数,将商继续除以2(或其他),直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
or 使用C++自带函数 _itoa(n,str,b); //b为进制

#include<bits/stdc++.h>
using namespace std;
string itoA(int num,int radix){
string ans="";
do{
int t=num%radix;
if(t>=0&&t<=9) ans+=t+'0';
else ans+=t-10+'A';
num/=radix;
}while(num!=0);
reverse(ans.begin(),ans.end());//字符串反转
return ans;
}
int main(){
int n,b;
cin>>n>>b;
string str;
str=itoA(n,b);
cout<<str<<endl;
return 0;
}
3.2 其他进制 转 十进制
思路:
ans=0, 把要转换的字符串从1-->n ,ans 乘以2 (或其他),加上 str [ i ](相当于反着来一遍)

int Atoi(string s,int n){//n进制转10进制
int ans=0;
for(int i=0;i<s.size();i++){
char t=s[i];
if(t>='0'&&t<='9')ans=ans*n+t-'0';
else ans=ans*n+t-'a'+10;
}
return ans;
}
or strtol函数
3.3
除了上面两个,c++中还有一些定向的转换:std::bitset(转2进制),std::oct(转8进制),std::dec (转10进制),std::hex(转16进制)。
更多详细参考:https://blog.csdn.net/lady_killer9/article/details/87904318
4.排序
4.1 快速排序
sort 解决
or 手写

//快速排序
void Quicksort(int array[],int left,int right){
if(left<right){
int i=left,j=right,pivot=array[left];
while(i<j){
while(i<j&&array[j]>=pivot)j--;
if(i<j)array[i++]=array[j];
while(i<j&&array[i]<=pivot)i++;
if(i<j)array[j--]=array[i];
}
array[i]=pivot;
Quicksort(array,left,i-1);
Quicksort(array,i+1,right);
}
}
4.2 归并排序


#include<iostream>
#include<algorithm>
using namespace std;
void mergearray(int aa[],int left,int mid,int right,int temp[]){
int i=left,j=mid+1;
int x=mid,y=right;
int k=0;
while(i<=x&&j<=y){
if(aa[i]<=aa[j])temp[k++]=aa[i++];
else temp[k++]=aa[j++];
}
while(i<=x)temp[k++]=aa[i++];
while(j<=y)temp[k++]=aa[j++];
for(int i=0;i<k;i++){
aa[left+i]=temp[i];
}
}
void mergesort(int aa[],int left,int right,int temp[]){
if(left<right){
int mid=(left+right)/2;
mergesort(aa,left,mid,temp);
mergesort(aa,mid+1,right,temp);
mergearray(aa,left,mid,right,temp);
}
}
int main(){
int a[100],b[100];
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
mergesort(a,0,n-1,b);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
完成,还剩高精度没看,等会看吧。
