问题标题: 代码分享

1
1
宋子墨
宋子墨
新手天翼
新手天翼

/*
    异或^{
        10变成2进制 1010
        5变成2进制  101
        用^就是 1010
                0101
        结果   1111 十进制结果15
        简单说就是上下对比,不一样就1,一样就0。
        ans^=a;
        能挑出单个的
        原理 a^a=0 0^a=a;
    }
    与&{
        10变成2进制 1010
        5变成2进制  101
        用&就是 1010
                0101
        结果   0000 十进制结果0
        简单说就是上下对比,一样就1,不一样就0。
    }
    取反~{
        10变成2进制 1010
        用~就是 1010
        结果    0101 十进制结果5
        简单的说就是把1变0,0变1,。
        但是计算机算的不是这样,因为计算机用的是补码。
        所以这个仅供参考
    }
    左移<<……(省略号填阿拉伯数字){
        5变成2进制 101
        用5<<1就是 101
        结果       1010 十进制结果10
        简单的说:
        a<<1就是a的二进制加上1个0。
        a<<2就是a的二进制加上2个0。
        以此类推……
        也可以说:
        a<<1就是a的十进制乘2的1次方。
        a<<2就是a的十进制乘2的2次方。
        以此类推……
        注意:这是整数乘法
    }
    右移>>……(省略号填阿拉伯数字){
        10变成2进制 1010
        用5>>1就是 1010
        结果       101 十进制结果5
        简单的说:
        a>>1就是a的二进制去掉1个0。
        a>>2就是a的二进制去掉2个0。
        以此类推……
        也可以说:
        a>>1就是a的十进制除以2的1次方。
        a>>2就是a的十进制除以2的2次方。
        以此类推……
        注意:这是整数除法,就算结果是小数也要写成整数
    }
    或|{
        10变成2进制 1010
        5变成2进制  101
        用|就是 1010
                0101
         结果    1111 十进制结果15
         简单说就是两数一起看,上下只要有个1,就直接往下写1,如果1个1都没,就写0.
    }
    注意:
    a&=b 就是 a=a&b
    a^=b 就是 a=a^b
    a<<=b 就是 a=a<<b
    a>>=b 就是 a=a>>b
    a|=b 就是 a=a|b
    http://www.1010jiajiao.com/daan/chapter_35286689.html
*/
#include<bits/stdc++.h>
using namespace std;
/*
链表:
list<int> l;  //定义链表
l.push_back(e);  //在链表结尾读入一个节点
list<int>::iterator it;  //it是迭代器,可以理解为遍历链表地址的工具
l.begin();  //链表开头
l.end();  //链表结尾
*/
void f(int x){//删除链表里面值为x的节点
    list<int> l;
    list<int>::iterator it;//it是迭代器,可以理解为遍历链表地址的工具
    for(it=l.begin();it!=l.end();it++){//遍历链表l
        if(*it==x){
            l.erase(it);
            break;
        }
    }
}
bool isprime(long long n){//质数
    if(n<=1)
    return false;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        return false;
    }
    return true;
}
long long gcd(long long m,long long n){//最大公因数
    while(m%n)
    {
        long long r=m%n;
        m=n;
        n=r;
    }
    return n;
    //求最小公倍数就是 m/gcd(m,n)*n
}
int gcd2(int x,int y){//最大公因数,递归解法
    if(x%y==0) return y;
    return gcd2(y,x%y);
}
bool wq(int n){//完全平方数
    if(sqrt(n)-int(sqrt(n))<=0.0000001)
    {
        return true;
    }
    return false;
}
bool hw(int n){//回文
    int t=0,s=n;
    while(n){
        t=t*10+n%10;
        n/=10;
    }
    return t==s;
}
int zys(int n){//质因数的个数(相同的只记一个)
    int s=0,t;
    for(int i=2;i<=sqrt(n);i++)
    {
        t=0;
        while(n%i==0)
        {
            n/=i;
            if(t==0)
            {
                s++;//如果换成输出的话也是相同的质因数只输出一个
                t++;
            }
            /*
            如果要输出  某数=几乘几乘几(相同的不删除)
            把这个函数改成void类型的,并删除return
            那么把上面的if整个删掉
            if(t==0)
            {
                cout<<i;
            }
            else
            {
                cout<<"*"<<i;
            }
            在循环外写
            if(n!=1) cout<<"*"<<n;
            */
        }
    }
    if(n!=1) s++;
    return s;
}
bool rn(int n){//判断闰年
    return n%400==0||n%4==0&&n%100!=0;
    /*
        给a[2]赋值要写成:a[2]=(rn(year)? 29:28);
        a数组是存每月有多少天的。
    */
}
string PLUS(string x,string y){//高精度加法,需要先定义a,b,c数组
    a[0]=x.size();
    b[0]=y.size();
    c[0]=max(a[0],b[0]);
    for(int i=1;i<=a[0];i++){
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++){
        b[i]=y[b[0]-i]-'0';
    }
    int jw=0;
    for(int i=1;i<=c[0];i++)
    {
        c[i]=a[i]+b[i]+jw;
        jw=c[i]/10;
        c[i]%=10;
    }
    if(jw!=0){
        c[++c[0]]=jw;
    }
    string s="";
    for(int i=c[0];i>=1;i--){
        s+=c[i]+'0';
    }
    return s;
}
string ZF(string x,string y){//高精度减法
    a[0]=x.size();
    b[0]=y.size();
    c[0]=max(a[0],b[0]);
    for(int i=1;i<=a[0];i++){
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++){
        b[i]=y[b[0]-i]-'0';
    }
    int jw=0;
    for(int i=1;i<=c[0];i++)
    {
        if(a[i]<b[i]){
            a[i+1]--;
            a[i]+=10;
        }
        c[i]=a[i]-b[i];
    }
    string s="";
    for(int i=c[0];i>=1;i--){
        s+=c[i]+'0';
    }
    while(s[0]=='0'&&s.size()!=1){
        s.erase(0,1);
    }
    return s;
}
string MUL(string x,string y){//高精度乘法,需要先定义a,b,c数组
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=x.size();
    b[0]=y.size();
    c[0]=a[0]+b[0]-1;
    for(int i=1;i<=a[0];i++){
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++){
        b[i]=y[b[0]-i]-'0';
    }
    for(int i=1;i<=a[0];i++)
    {
        for(int j=1;j<=b[0];j++){
            c[i+j-1]+=a[i]*b[j];
        }
    }
    for(int i=1;i<=c[0];i++)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
    if(c[c[0]+1]!=0){
        c[0]++;
    }
    string s="";
    for(int i=c[0];i>=1;i--){
        s+=c[i]+'0';
    }
    while(s[0]=='0'&&s.size()!=1){
        s.erase(0,1);
    }
    return s;
}
int main()
{
}
 

 

 

 

两年前刷题的时候自己打的,不知道现在有没有过时,只适合学不到一年的童鞋使用


0
肖付强
肖付强
初级光能
初级光能

写的挺好,大佬。

可以把豆给我吗?

0
我要回答