Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
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:

User ID:
Title:

Content: