1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 现在用一个函数fn(int n,int flag)实现,当flag为0时,实现fn1功能,如果flag为1时实现fn2功能!
定义一个二维数组 float t[2][5]存入{{2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!}}然后给出一个循环:
for(i=0;i<6;i++)
{
temp=temp+n/t[flag];
}
最后得到计算值!呵呵,典型的空间换时间的算法!
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
改进了的方案{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
:“不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们程序员服务的!”多么精辟的语言{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
long fn(long n)
{
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}
2). 他要求我用一种技巧性的编程方法来用一个函数实现两个函数的功能n为如:fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6! {
if(n<=0)
{
printf(“error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 现在用一个函数fn(int n,int flag)实现,当flag为0时,实现fn1功能,如果flag为1时实现fn2功能!
定义一个二维数组 float t[2][5]存入{{2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!}}然后给出一个循环:
for(i=0;i<6;i++)
{
temp=temp+n/t[flag];
}
最后得到计算值!呵呵,典型的空间换时间的算法!