用多种方法交换两个数的值

  今天上了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;
 }

 今天就总结到这里吧。但愿对你们有帮助。变量

相关文章
相关标签/搜索