/*
异或^{
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()
{
}
两年前刷题的时候自己打的,不知道现在有没有过时,只适合学不到一年的童鞋使用