二進位制運算加減乘除+快速冪

冬天的睡袋發表於2024-11-15
#include<bits/stdc++.h>
using namespace std;

long long add(long long a,long long b){
    long long ans=a;
    while(b!=0){
        ans=a^b;
        b=(a&b)<<1;
        a=ans;
    }
    return ans;
}

long long mine(int a,int b){
     return add(a,add(~b,1));
}

long long muti(long long a,long long b){
    long long ans=0;
    while(b){
        if(b&1)ans=add(ans,a);
        a<<=1;
        b>>=1;
    }
    return ans;

}
//一般情況
long long ca(long long a,long long b){
       long long x=a<0? abs(a):a;
       long long y=b<0? abs(b):b;
       long long ans=0;
    for (int i = 30; i >=0 ; i=mine(i,1)) {
        if ((x >> i) >= y) {
            ans |= (1 << i);
            x = mine(x, y << i);
        }
    }
    return  a<0^b<0 ?abs(ans):ans;
}


long long pqow(long long a,long long b){
    long long ans=1;
    while(b){
        if(b&1)ans= muti(a,ans);
        a=muti(a,a);
        b>>=1;
    }
    return ans;
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    long long a,b;
    cin>>a>>b;
    cout<<add(a,b)<<'\n';
    cout<<mine(a,b)<<'\n';
    cout<<muti(a,b)<<'\n';
    cout<<ca(a,b)<<'\n';
    cout<<pqow(a,b)<<'\n';
}


相關文章