Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

求指导 为何我用unsigned long就不对 改成long long就对了 ,求大牛帮忙

Posted by tangbohu222 at 2011-05-01 22:04:00 on Problem 1095
#include <stdio.h>
#include <iostream>
using namespace std;
long long Max=500000000;
long long catalan[30];
int cur;

void catalan_fun()
{
	catalan[0]=catalan[1]=1;
	long long m=1;
	 cur=2;
	while(m<Max)
	{
		catalan[cur]=catalan[cur-1]*(4*cur-2)/(cur+1);
		m+=catalan[cur];
		cur++;
	}
}
void preorder(int n,long long k)
{
	int s=0;
	int i=0;
	if (n==1)
	{
		printf("X");
		return;
	}
	for (i=0;i<=n;i++)//先右后左
	{
		if (s+catalan[i]*catalan[n-i-1]>=k)
		{
			break;
		}
		else
		{
			s+=catalan[i]*catalan[n-i-1];
		}

	}
	
	if (i)
	{
		printf("(");
		preorder(i,(k-s-1)/catalan[n-i-1]+1);
		printf(")");
	}
	printf("X");
	if (n-i-1)
	{

		printf("(");
		preorder(n-i-1,(k-s-1)%catalan[n-i-1]+1);
		printf(")");

	}

}
int main()
{
	catalan_fun();
	long long num;
	while(cin>>num&&num!=0)
	{
		long long k=0;
		int i;
		for (i=1;i<cur+10;i++)
		{
			if (k+catalan[i]>=num)
			{
				break;
			}
			else
			{
				k+=catalan[i];
			}
		}
		
		preorder(i,num-k);
		printf("\n");
		
	}
	
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator