|
发表于 2016-8-18 09:31:46
|
显示全部楼层
本帖最后由 impossible 于 2016-8-18 09:39 编辑
是第一项到四百万项,还是最多是四百万值的项;
以下是第一项到四百万项的代码
#include <stdio.h>
#define min(a,b) ((a)>(b)?(b):(a))
#define NUMWIDTH 250000
/*数组的空间,四百万项站多少位我也不知道,但我运行到20万项时数字写到文件时已经有37kb了
*如果超出这个空间就用vector
*我只放九位数字到一个int里,int最后一位放两数相加溢出的数字。数组的最后一个放当前数字站数组到哪一个int。
*/
inline void add(unsigned int *p1,unsigned int *p2);
int main()
{
unsigned int loop=0,i,j[NUMWIDTH]={1},k[NUMWIDTH]={2},sum[NUMWIDTH]={0};
j[NUMWIDTH-1]=0;
k[NUMWIDTH-1]=0;
sum[NUMWIDTH-1]=0;
for(i=2;i<4000000;i+=2){
if(k[0]%2==0){
add(sum,k);
}
add(j,k);
if(j[0]%2==0){
add(sum,j);
}
add(k,j);
}
for(i=NUMWIDTH-2;i!=0;i--)
{
printf("%u",sum[i]);
}
printf("\n");
return 0;
}
inline void add(unsigned int *p1,unsigned int *p2)
{
unsigned int loop=0;
for(loop=0;loop<=min(p1[NUMWIDTH-1],p2[NUMWIDTH-1]);loop++){
p1[loop]+=p2[loop];
p1[loop+1]+=p2[loop]/1000000000;
}
if(p1[NUMWIDTH-1]<loop && p1[loop])p1[NUMWIDTH-1]=loop;
}
C:\Users\Administrator\Desktop\2.png |
|