posts - 1,  comments - 2,  trackbacks - 0

写一个函数计算当参数为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++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

  •  

最新评论