寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n
生活随笔
收集整理的這篇文章主要介紹了
寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看到網路上一篇blog一個問題,引發一群網友的討論。
Q:寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n
這是個常見的級數問題,我們必須化簡成closed form 來得到最佳的效率。
一般解法: 主要使用 迴圈
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 fn(long n) {if(n<=0) {printf("error: n must > 0);exit(1);}if(0==n%2)return (n/2)*(-1);elsereturn (n/2)*(-1)+n;?n%2 也可以用 n&1來取代。n/2 用 n>>1
long fn(unsigned long n){ return (long)n/2*(-1)+((n%2)?n:0); }更牛逼的還用assembly language
long fn(long n) { __asm{ mov eax,n ; Load n to AX inc eax ; AX = AX + 1. shr eax,1 ; AX divides by 2. jnc EXIT ; Exit if AX is a odd number. neg eax ; AX = -AX ; EXIT: } }?
轉載于:https://www.cnblogs.com/bittorrent/archive/2013/01/03/2843457.html
總結
以上是生活随笔為你收集整理的寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文社区用户名规范
- 下一篇: php学习_数组 2013.01.04