首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fibonacci中的偶数项之和(<400万)是什么?[大值数据类型混淆]

Fibonacci中的偶数项之和(<400万)是什么?[大值数据类型混淆]
EN

Stack Overflow用户
提问于 2009-10-29 15:14:44
回答 14查看 23.9K关注 0票数 3

从1和2开始,Fibonacci系列的前10个术语将是:

1、2、3、5、8、13、21、34、55、89、

求出序列中所有不超过400万的偶数项之和。

现在,我想到了怎么做这件事。但我对保存这么大数据的数据类型感到困惑。我在int上得到了奇怪的结果。:(

更多:它的计划欧拉第二个问题。但我搞不懂。我得到疯狂的价值观作为答案。有人能把理想的程序贴出来吗?

编辑:这是我为打印Fibonacci屏幕而写的。赤裸的基础。即使我给出了100的限制,我的变量也会变得疯狂。我的代码错了吗?

代码语言:javascript
运行
复制
// Simple Program to print Fibonacci series in Console
#include <stdio.h>
int main() {
    int x=1,y=2,sum=0,limit=0,i=0,temp=0;
    printf("Enter Limit:");
    scanf("%d",&limit);

    if(limit==1)
        printf("%d",x);
    else if(limit>1) {
        printf("%d %d",x,y);
        if (limit>2) {
            while (i<limit-2) {
                temp=y;
                sum=x+y;
                x=temp;
                y=sum;
                printf(" %d",sum);
                i++;
            }
        }
    }      

    printf("\n");
    return 0;
}

解决了:实际上,我自己找到了解决方案。这是我的节目。它起作用了。

代码语言:javascript
运行
复制
#include <stdio.h>
int main() {
    int x=1,y=2,sum,limit;     //Here value of first 2 terms have been initialized as 1 and 2
    int evensum=2;             //Since in calculation, we omit 2 which is an even number
    printf("Enter Limit: ");   //Enter limit as 4000000 (4million) to get desired result
    scanf("%d",&limit);
    while( (x+y)<limit ) {
        sum=x+y;
        x=y;
        y=sum;
        if (sum%2==0)
            evensum+=sum;
    }
    printf("%d \n",evensum);
    return 0;
}
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-10-31 17:18:17

伙计们,我知道答案了。我确认了结果,int可以处理。这是我的节目:

代码语言:javascript
运行
复制
#include <stdio.h>
int main() {
    int x=1,y=2,sum,limit;     //Here value of first 2 terms have been initialized as 1 and 2
    int evensum=2;             //Since in calculation, we omit 2 which is an even number
    printf("Enter Limit: ");   //Enter limit as 4000000 (4million) to get desired result
    scanf("%d",&limit);
    while( (x+y)<limit ) {
        sum=x+y;
        x=y;
        y=sum;
        if (sum%2==0)
            evensum+=sum;
    }
    printf("%d \n",evensum);
    return 0;
}

所有的回复和帮助。“站在我的脚下思考”来拯救:)

票数 1
EN

Stack Overflow用户

发布于 2009-10-29 15:31:10

因为您只想要最多400万,所以int很可能不是您的问题。

很有可能你的程序是错误的,数据存储也很好,所以你应该用更小的值来测试你的程序。例如,很明显,前三个偶数项之和为44 (提示:每三个偶数项是偶数),所以如果您运行的程序上限为50,那么您应该立即得到44。继续运行小测试用例,以获得对较大测试用例的信心。

票数 6
EN

Stack Overflow用户

发布于 2009-10-29 15:54:21

为了安全起见,使用'long‘数据类型;C标准要求至少容纳40亿,但在大多数机器上,'int’也能容纳40亿。

代码语言:javascript
运行
复制
enum { MAX_VALUE = 4000000 };
int sum  = 0;
int f_n0 = 0;
int f_n1 = 1;
int f_n2;

while ((f_n2 = f_n0 + f_n1) < MAX_VALUE)
{
    if (f_n2 % 2 == 0)
        sum += f_n2;
    f_n0 = f_n1;
    f_n1 = f_n2;
}
printf("%d\n", sum);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1644446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档