今天被poj上c语言64位整数的问题搞残了

做了做poj上面的1037http://poj.org/problem?id=1037,水平有限,看的大牛思路,自己“回忆”出来的

题目中给了个好心的提示You may assume, that the total number of cute little wooden fences with 20 planks fits into a 64-bit signed integer variable (long long in C/C++, int64 in FreePascal)自己算了算,其实是不会超过32位的,于是乎按照提示写了long long在C中定义大整数,程序如下

#include<stdio.h>
#include<stdlib.h>
typedef enum __bool{false=0,true=1}bool;
long long up[22][22],down[22][22];
int ans[22];
void getnext(int n,long long c,bool uod)
{
    if(n==0)
        return;
    int t,i;
    long long sum;
    if(!uod)
    {
        t=ans[n+1];
        sum=0;
        while(sum+down[n][t]<c)
        {
            sum+=down[n][t];
            t++;
        }
    }
    else
    {
        t=1;
        sum=0;
        while(sum+up[n][t]<c)
        {
            sum+=up[n][t];
            t++;
        }
    }
    ans[n]=t;
    getnext(n-1,c-sum,!uod);
    for(i=1;i<n;i++)
        if(ans[i]>=t)
            ans[i]++;

}
int main()
{
    long long c,sum;
    int n,all,i,j,k,t;
    up[1][1]=down[1][1]=1;
    for(i=2;i<21;i++)
    {
        for(j=1;j<=i;j++)
        {
            down[i][j]=up[i][j]=0;
            for(k=j;k<i;k++)
                up[i][j]+=down[i-1][k];
            for(k=1;k<j;k++)
                down[i][j]+=up[i-1][k];
        }
    }
    scanf("%d",&all);
    while(all--)
    {
        scanf("%d%lld",&n,&c);
        for(t=1,sum=0;sum+up[n][t]+down[n][t]<c;t++)
        {
            sum+=up[n][t];
            sum+=down[n][t];
        }
        ans[n]=t;
        if(sum+down[n][t]<c)
            getnext(n-1,c-sum-down[n][t],false);
        else
            getnext(n-1,c-sum,true);
        for(i=1;i<n;i++)
            if(ans[i]>=t)
                ans[i]++;
        for(i=n;i>0;i--)
            printf("%d ",ans[i]);
        printf("\n");
    }
    return 0;
}
结果在poj上换来了一次又一次的CE

Main.c
F:\temp\11212041.219768\Main.c(10) : error C2143: syntax error : missing ';' before 'type'
F:\temp\11212041.219768\Main.c(11) : error C2143: syntax error : missing ';' before 'type'
F:\temp\11212041.219768\Main.c(14) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(15) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(16) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(16) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(18) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(18) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(19) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(24) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(25) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(26) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(26) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(28) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(28) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(29) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(32) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(33) : error C2065: 'sum' : undeclared identifier
F:\temp\11212041.219768\Main.c(34) : error C2065: 'i' : undeclared identifier
F:\temp\11212041.219768\Main.c(34) : error C2065: 'i' : undeclared identifier
F:\temp\11212041.219768\Main.c(34) : error C2065: 'i' : undeclared identifier
F:\temp\11212041.219768\Main.c(35) : error C2065: 'i' : undeclared identifier
F:\temp\11212041.219768\Main.c(35) : error C2065: 't' : undeclared identifier
F:\temp\11212041.219768\Main.c(36) : error C2065: 'i' : undeclared identifier

 

换成C++交的时候

又崩出这个错了,不知道是怎么个问题,C++不支持枚举类型么?

匆匆忙忙查了查,还是没结果,希望路过的大牛指点一下,同时原谅我在这里发水帖啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值