10.17 学习记录

  1. 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);

     

  2. 快速幂
    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. 进制转换

    一般其他进制为  字符串,十进制为  整型

           3.1   十进制  转   其他进制

                 思路: 

        把要转换的数,除以2( 或其他),得到商和余数,将商继续除以2( 或其他),直到商为0。最后将所有余数 倒序排列,得到数就是转换结果。

        or  使用C++自带函数   _itoa(n,str,b);   //b为进制

#include
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<endl;
    return 0;
}
View Code

 

               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){
        char t=s[i];
        if(t>='0'&&t<='9')ans=ans*n+t-'0';
        else ans=ans*n+t-'a'+10;
    }
    return ans;
}
View Code

                          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=pivot)j--;
            if(iarray[j];
            while(i;
            if(iarray[i];
        }
        array[i]=pivot;
        Quicksort(array,left,i-1);
        Quicksort(array,i+1,right);
    }
}
View Code

 

         4.2  归并排序

10.17 学习记录_第1张图片

#include
#include
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){
        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)
        cin>>a[i];
    mergesort(a,0,n-1,b);
    for(int i=0;i)
        cout<" ";
    cout<<endl;
    return 0;
} 
View Code

完成,还剩高精度没看,等会看吧。

    

 

你可能感兴趣的:(10.17 学习记录)