91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中的奇技淫巧

發布時間:2020-08-24 10:22:11 來源:腳本之家 閱讀:110 作者:mdxy-dxy 欄目:編程語言

前言

學習C語言的過程中,總會遇到很多令人眼前一亮的代碼,尤其是你寫了幾十行的代碼,別人只用了簡單幾行的遞歸就實現的功能。下面我就總結幾個C語言中 比較新手向的代碼。讓你有一種”woc!還能這么寫!”的想法,二進制 遞歸大神繞路。

第一種:遞歸類

求最大公因數

常規寫法:

int gcd(int m, int n)
{
  int r;
  if (m>n){r=m,m=n,n=r;}
  r=n%m;
  while (r!=0){
    n=m;
    m=r;
    r=n%m;
  }
  return m;
}

騷操作!–遞歸寫法!

int gcd(int x, int y) {
  return y?gcd(y,x%y):x;
}

第一次看到這個代碼,我的反應是黑人問號臉。臥槽?輾轉相除法,還能這么寫?wtf

逆序輸出字符串

常規寫法:

char *reverse(char *str)   
{   
 if( !str )           //判斷輸入字符串是否為空串 
 {   
 return NULL;         //若為空串則返回NULL 
 }   

  int len = strlen(str);  
  if( len > 1 )   
  {   
    char ctemp =str[0];   
    str[0] = str[len-1];    
    str[len-1] = '\0';   // 最后一個字符在下次遞歸時不再處理   
    reverse(str+1);     // 遞歸調用   
    str[len-1] = ctemp;   
  }   

  return str;   
}

遞歸寫法!

void reverse(char *x) 
{ 
  if(*x){          //若該字符型變量為0(ascii碼值為0,不是數字'0')的字符則不進入 
    fun(x+1);     //遞歸調用 
    printf("%c",*x);  //輸出單個字符 
  } 
}

這樣寫是不是有點棧的味道!

第二種:二進制!

交換兩個變量的值

常規寫法:

int temp = a;
a = b;
b = temp;

三行代碼,用到一個中間值。那么用二進制中的異或可以不使用第三個值,并且只有一行代碼。

使用二進制的寫法:

a ^= b ^= a ^= b;

具體兩者的時間復雜度,沒有深入的了解。

統計變量二進制中 ‘1' 的個數

常規寫法:

int v; //被計算的變量 
int count=0; //計算二進制中‘1'的個數 
while(v != 0){ 
  if(v%2 ==1) 
    count++; 
    v /= 2; 
}

將被統計的變量對2求余,如果余數為1則count加一。

使用二進制的寫法:

int v=9;  //被統計的變量 
int count; //統計二進制中‘1'的個數 
for(count=0; v; count++) {
  v &= v-1;
}

利用二進制操作符的特性,操作二進制能讓方法變得更加簡單合理。

To be continue…

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天台县| 景洪市| 灵武市| 阿拉善右旗| 翁源县| 汕尾市| 双鸭山市| 民和| 南溪县| 房产| 分宜县| 财经| 衡阳市| 南开区| 平顶山市| 柞水县| 铁岭市| 渑池县| 东光县| 临湘市| 龙州县| 黔西县| 独山县| 新余市| 右玉县| 曲周县| 广宗县| 昌黎县| 靖边县| 合山市| 托克托县| 都安| 杂多县| 临湘市| 河东区| 民乐县| 金溪县| 同仁县| 洛宁县| 林芝县| 时尚|