Project Euler - Even Fibonacci numbers

  • 引言

题目倒是不难,但是中间会出现很多错误,比如创建数组越界问题,long long在VC6.0不可用问题等等,好在都解决了,加油吧少女娜!

  • 题目

  • C++答案
#include<iostream>
using namespace std;

	_int64 const max=4000000; //数组大小30,0-29
	//int *num;
	_int64 num[max];

int main()
{
	num[0]=1;
	num[1]=2;
	int count=0;
	for(int i=2;i<max;i++)      //创建斐波那契数组
	{
		num[i]=num[i-1]+num[i-2];
		if(num[i]>max)
		{
			count=i;
			break;
		}
	}

	_int64 sum=0;

	for(int j=0;j<count;j++)
	{
		if(num[j]<=max && num[j]%2==0)
		{
			sum=sum+num[j];
		}
	}
	printf("sum=%I64d\n",sum);
	return 0;
}


  • 大佬解法
int main()
{
	int x=1;
	int y=2;
	int z=x+y;
	int sum=2;
	while(1)
	{
		if(z%2==0)
		{
			sum+=z;
		}
		x=y;
		y=z;
		z=x+y;
		if(x>4000000)
		{
			break;
		}
	}
	cout<<sum<<endl;
}

 

  • 总结
  1. long long int 问题:因为 VC6中所使用的编译器是C90标准的,而 long long 型是在C99中新加入的(longlong int双长整型是C 99扩充的数据类型,同时扩充的还有float_complex,double_complex,long long_complex,bool等),故无法实现编译。(——此答案搜索于百度),但是在VC6.0中可以用_int64代替
  2. 数组越界问题。如果数组生命在函数内部,那这个数组是属于局部变量,相当于存放在栈上,4000000个int型占空间4000000*4byte=16000000=15.25*1024*1024=15.25M,栈的默认内存在1M左右,所以会导致溢出。要解决这个问题有两种方法,法一:存放为全局变量,法二:存放在堆上(from baidu)。我现在写的就是第一种方法,第二种方法还没搞赢

  3. 另外,如果使用整型int来保存结果,会导致结果错误。用使用printf输出结果时,格式字符串应该写成%I64d以输出long long类型的整数。

  • 小声bb

大佬的解法真的简洁,在看我的解法就感觉好笨重...路漫漫其修远兮,加油呀小娜子!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值