写一个函数计算当参数为n(n很大)时的值1-2+3-4+5-6+7....+n.
你可能会马上写出如下代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 long fn(long n) 4 { 5 long temp=0; 6 int i,flag=1; 7 if(n<=0) 8 { 9 printf("input error\n"); 10 exit(1); 11 } 12 for(i=1;i<=n;++i) 13 { 14 temp+=(flag*i); 15 flag=-1*flag; 16 } 17 return temp; 18 }
但....
执行结果肯定没问题,但是当n很大时这个程序效率很低,尤其在嵌入式系统开发中,程序的运行效率很重要。
然后你可能改进了代码
19 long fn1(long n) 20 { 21 long temp=0; 22 int i=1,j=1,flag=1; 23 if(n<=0) 24 { 25 printf("input error\n"); 26 exit(1); 27 } 28 while(j<=n) 29 { 30 tmpe+=i; 31 i=-i; 32 i>0?i++:i--; 33 j++; 34 } 35 return temp; 36 }
比起上一个程序,将所有涉及到乘法指令的语句改为执行加法语句,在运算时间上缩短了很多,而代价只是增加了一个整型变量。
仍然不够优化欧!
37 long fn2(long n) 38 { 39 if(n<=0) 40 { 41 printf("input error\n"); 42 exit(1); 43 } 44 if(0==n%2) 45 return (n/2)*(-1); 46 else 47 return (n/2)*(-1)+n; 48 49 }
有没有很惊讶!!
不要认为CPU运算速度快就把所有问题推给它做,我们应该将代码优化再优化。
不要忘了最后的测试工作!!
50 int main() 51 { 52 printf("ret: %d %d %d\n",fn(100),fn1(100),fn2(100)); 53 return 0; 54 }
时间: 2024-10-13 01:34:11