用多種方法交換兩個數的值

  今天上了C語言課,老師講了有關交換兩個數的問題。課後,通過本身的思考和總結,我得出瞭如下幾種方法。雖然這個問題的方法還有不少,但我目前只瞭解到了這五種方法,但願你們多提建議和意見。其餘的方法待補充奧。。。ide

法一:spa

  你們最容易想的方法,首先設一個臨時變量,利用臨時變量將兩個數交換。下面是實現它的代碼:指針

#include<stdio.h>
int main()
{
  int num1=5,num2=10,tmp=0;
  printf("before:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  tmp=num1;
  num1=num2;
  num2=tmp;
  printf("after:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  return 0;
}

法二:利用指針實現,這種方法效率比較高。it

 

#include <stdio.h>
 void swap(int* p1, int *p2)
 {
   int tmp = *p1;
     *p1 = *p2;
     *p2 = tmp;
 }
 int main()
 {
  int num1 = 5;
  int num2 = 10;
  int tmp = 0;
  printf("before:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  swap(&num1,&num2);
  printf("after:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  return 0;
 }

法三:能夠不用設置臨時變量的方法,利用加減法實現,可是可能會出現溢出。io

#include <stdio.h>
 int main()
 {
  int num1 = 5;
  int num2 = 10;
  printf("before:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  num1 = num1+num2;
  num2 = num1-num2;
  num1 = num1-num2;
  printf("after:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  return 0;
 }

法四:利用乘除實現。class

 

#include <stdio.h>
 int main()
 {
  int num1 = 5;
  int num2 = 10;
  printf("before:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  num1 = num1*num2;
  num2 = num1/num2;
  num1 = num1/num2;
  printf("after:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  return 0;
 }

法五:利用異或運算實現,但這個方法效率比較低。效率

 

#include <stdio.h>
 int main()
 {
  int num1 = 5;
  int num2 = 10;
  printf("before:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  num1 = num1^num2;
    num2 = num1^num2;
    num1 = num1^num2;
  printf("after:\n");
  printf("num1=%d\num2=%d\n",num1,num2);
  return 0;
 }

 今天就總結到這裏吧。但願對你們有幫助。變量

相關文章
相關標籤/搜索