0-1序列不重复1

时间:2014-03-06 23:23:31

标签: c

我的任务是编写一个程序,其中输入是指数2,输出是序列的数量(在最大2 ^ n个序列中),其中彼此没有1。 (N< = 50)

例如,在3的输入上,输出为5,因为2 ^ 3 = 8,在8种可能性中,唯一可接受的是:(000,001,010,100,101)和(110,011,111)是不可接受的,因为彼此相邻的是2个或更多。

我的程序工作正常,直到31,数字32停止工作,我想是溢出问题。我尝试了long int和unsigned int,其中没有一个似乎有帮助。

#include <stdio.h>
#include <math.h>

main(){
    int t,i,n,j,ki;
    scanf("%d",&t);
    for (i=1;i<=t;i++){
            scanf("%d",&n);
            ki=pow(2,n)-(n*(n-1))/2;
            printf("Scenario #%d:\n%d\n\n",i,ki);
    }
    return 0;
}

帮帮我pl0x。

1 个答案:

答案 0 :(得分:1)

对于变量ki

第1步:使用unsigned long long代替int

第2步:使用1<<n代替pow(2,n)

第3步:使用llu%代替%d

int main()
{
    int t,i,n;
    unsigned long long ki,one=1;
    scanf("%d",&t);
    for (i=1;i<=t;i++)
    {
        scanf("%d",&n);
        ki = (one<<n)-n*(n-1)/2;
        printf("Scenario #%d:\n%llu\n\n",i,ki);
    }
    return 0;
}