- 引言
题目倒是不难,但是中间会出现很多错误,比如创建数组越界问题,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;
}
- 总结
- long long int 问题:因为 VC6中所使用的编译器是C90标准的,而 long long 型是在C99中新加入的(longlong int双长整型是C 99扩充的数据类型,同时扩充的还有float_complex,double_complex,long long_complex,bool等),故无法实现编译。(——此答案搜索于百度),但是在VC6.0中可以用_int64代替
-
数组越界问题。如果数组生命在函数内部,那这个数组是属于局部变量,相当于存放在栈上,4000000个int型占空间4000000*4byte=16000000=15.25*1024*1024=15.25M,栈的默认内存在1M左右,所以会导致溢出。要解决这个问题有两种方法,法一:存放为全局变量,法二:存放在堆上(from baidu)。我现在写的就是第一种方法,第二种方法还没搞赢
-
另外,如果使用整型int来保存结果,会导致结果错误。用使用printf输出结果时,格式字符串应该写成%I64d以输出long long类型的整数。
-
小声bb
大佬的解法真的简洁,在看我的解法就感觉好笨重...路漫漫其修远兮,加油呀小娜子!