2017-05-09 35 views
-6
for(int a0 = 0; a0 < t; a0++){ 
    long long int n; 
//taking the input limit 
    cin >> n; 
    long long int n1=8,n2=34,sum=10; 
    //iteration till the limit 
    while(n2<=n) 
    { 
     long long int l=n2; 
     //for finding the next even fibonacci number 
     n2=4*(n2)+n1; 
     n1=l; 
     sum+=n1; 
    } 
    cout<<sum<<endl; 
} 

这是查找给定极限n的偶数斐波那契数的总和的代码。 当我使用int来代替long long long时,会出现超时问题。处理不同数据类型有什么不同?性能如何变化?关于在代码中超时

+1

你洋溢着'int'最有可能的,因此从来没有打破循环。 – StoryTeller

+0

请提供'n'的测试值 – AndyG

+0

您能解释吗?溢出时会发生什么? – Nethi

回答

0

你不需要使n2 = 34。 我们可以使用数组来完成这个问题,像这样:

int a[1001]; 
memset(a,0,sizeof(a)); 
while(!EOF){ 
    a[0]=a[1]=1; 
    cin>>n; 
    for(int i=2;i<=n;i++){ 
     a[i]=a[i-1]+a[i-2]; 
    } 
    cout<<a[n]; 
} 
+0

我只需要斐波纳契数字。所以我推导出这个公式。如果n值非常大,它可能会造成存储问题。所以我没有使用数组。 – Nethi