OJ基础


输出技巧

要输出一个char数组时

	char str[n];
	...
	...
	//一系列处理后
	str[n]='\0';
	printf("%s",str); //在数组末尾加上\0可以直接输出,省时

赋初值技巧

bool visited[n];
memset(visited, 0, sizeof(visited));
//memset用于赋初值,多用于字符串

大根堆小根堆

priority_queue<int, vector<int>, greater<int> > Q;
//小根堆,注意最后的> >中间空格
priority_queue<int> Q;
//默认为大根堆
//每次top出最大值或最小值

注意事项

在使用到stack,queue的时候,注意进行清空

while(!Q.empty())
{
	Q.pop();
}

高精度数

struct bigInteger{
	int digit[40];
	int size;
	void init(){
	    for(int i=0;i<40;i++)
    	    digit[i]=0;
    	size=0;
	}
	void set(int x)
	{
    	init();
    	size=0;
   		do{
        	digit[size++]=x%100000;
        	x/=100000;
    	}while(x!=0);
	}
	bigInteger operator * (int x) const{
    	bigInteger ret;
    	ret.set(0);
    	int tmp=0,i;
    	for(i=0;i<size;i++)
    	{
        	ret.digit[i]=(digit[i]*x+tmp)%100000;
        	tmp=(digit[i]*x+tmp)/100000;
    	}
    	if(tmp!=0)
    	{
        	ret.digit[size]=tmp;
        	ret.size=size+1;
    	}else
        	ret.size=size;
    	return ret;
	}

	bigInteger operator + (const bigInteger &A) const{
    	bigInteger ret;
    	ret.set(0);
    	int tmp=0,i;
    	for(i=0;i<size||i<A.size;i++)
    	{
        	ret.digit[i]=(digit[i]+A.digit[i]+tmp)%100000;
        	tmp=(digit[i]+A.digit[i]+tmp)/100000;
    	}
    	if(tmp!=0)
    	{
        	ret.digit[i]=tmp;
        	ret.size=i+1;
    	}else
        	ret.size=i;
    	return ret;
	}
	bool operator > (const bigInteger &A) const{
    	if(size>A.size) return true;
    	else if(size<A.size) return false;
    	else{
        	int i=size-1;
        	while(i&&digit[i]==A.digit[i]) i--;
        	return digit[i]>A.digit[i];
    	}
	}
	void ouput()
	{
    	printf("%d",digit[0]);
	}
};

二分求幂

快速求a的b次方的方法,原理图为:
image

剑指offer上的递归代码:

double exp_mod(double a, unsigned int b)
{
	if(b == 0)
		return 1;
	if(b == 1)
		return a;
	double result=exp_mod(a, b>>1);
	result*=result;
	if(b & 1)             //若b为奇数
		result *= a;
	return result;
}

机试指南上的非递归代码:

	int power(int a, int b)
	{
		int ans=1;
		while(b!=0)
		{
			if(b & 1)
				ans *= a;
			b>>=1;
			a*=a;
		}
		return ans;
	}
posted @ 2015-03-23 22:41  木木de小孩  阅读(100)  评论(0)    收藏  举报