写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
方法一:依次循环
#include<stdio.h>
#include<stdlib.h>
long fn(long n);
int main(void)
{ long n=0;
printf("input n\n");
scanf("%ld",&n);
printf("result=:%ld",fn(n));
system("pause");
return 0;
}
long fn(long n)
{
long temp=0;
int i,flag=1;//用FLAG控制正负号的交替 ,I 从1循环到N
if(n<=0)
printf("error: n must > 0");
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;
}
方法三:直接跳过循环!!!整体上看,考虑到1-2+3-4+.....n的规律.. 其值等于中间数..
实现代码如下:
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;
}
是很强悍吧?我说过了嘛,是越来越优噻~
posted on 2007-11-11 22:15
很笨的蛋 阅读(275)
评论(0) 编辑 收藏 引用 所属分类:
编程 C C++