1. 程式人生 > >關於數值交換的幾種方法

關於數值交換的幾種方法

在大量的開發中常常會遇到需要交換兩個數值的問題,今天就給大家分享一些數值交換方面的方法:

第一種方法:

這也是大家最容易想到的方法,即利用中間變數達到交換兩個數的目的,具體如下:

     int tmp;
     tmp = i1;
     i1 = i2;
     i2 = tmp;

這種方法執行效率是最低了

第二種方法:

利用數學中的運算技巧:

i1 = i1 + i2;
i2 = i1 - i2;
i1 = i1 - i2;

這樣也可以實現兩個數的交換

第三種方法:

則是利用位運算中的異或來實現資料交換

i1 = i1 ^ i2;
i2 = i1 ^ i2;
i1 = i1 ^ i2;

這種方式的執行效率相對來說比較高。

原始碼如下:

#include <stdio.h>

void swap1(int i1,int i2)
{
      int tmp;


      tmp = i1;
      i1 = i2;
      i2 = tmp;
}
void swap2(int i1,int i2)
{
      i1 = i1 + i2;
      i2 = i1 - i2;
      i1 = i1 - i2;
}
void swap3(int i1,int i2)
{
      i1 = i1 ^ i2;
      i2 = i1 ^ i2;
      i1 = i1 ^ i2;
}
int main(void)
{
      int i,j;

      i = 3;
      j = 5;
      swap1(i,j);
      printf("i = %d,j = %d\n",i,j);

      i = 6;
      j = 8;
      swap1(i,j);
      printf("i = %d,j = %d\n",i,j);

      i = 2;
      j = 7;
      swap1(i,j);
      printf("i = %d,j = %d\n",i,j);
      return 0;
}

執行結果:

相關推薦

C語言交換兩個變數數值方法

因為經常見到這類題目,就自己總結了以下幾種辦法 1. 建立中間變數 這是最快也是最簡單的辦法,例如: #include<stdio.h> int main() { int a=10; int b=20; i

交換兩個數值方法

public class Remainder{ public static void main(String [] args){ /* 交換兩個數值 */ //使用臨時變數 i

SpringMVC獲得請求引數值方法

    有不少同事在工作過程中,會遇到分不清如何獲得請求引數值的情況,明明自己測試過的介面是可以獲得引數的值的,而給第三方呼叫的時候就不可以,這些情況不甚列舉。下面博主就給大家詳細介紹SpringMVC獲得請求引數獲取的幾種方法。   首先介紹幾種常見的Requ

關於數值交換方法

在大量的開發中常常會遇到需要交換兩個數值的問題,今天就給大家分享一些數值交換方面的方法: 第一種方法: 這也是大家最容易想到的方法,即利用中間變數達到交換兩個數的目的,具體如下:      int tmp;      tmp = i1;      i1 = i2;    

數值交換方法

1、最簡單、最標準的一種方法,建立一個臨時變數int main() { //分別給兩個整型變數a,b賦值 int a = 45; int b = 66; //建立臨時變數c int c = 0; //列印交換前a,b的值 printf("a=%d b=%d\n"

Linux基礎------Shell數值計算的方法

在Linux下總會遇到數值計算問題,由於Linux下變數都屬於弱變數,沒有變數型別的概念(貌似指令碼語言都是這樣)。 例如定義一個變數:x=1 此時的變數x預設是一個字串,即使看著像一個數字,所以當嘗試用如下的方法去進行計算的時候,得到的結果卻不是想要的 echo $x+=1 

[日常練習] 4. 基於交換兩整形變數值的三方法的C語言實現。

當面試題遇到:交換兩整形變數的值。你是感到無比的“慶幸”遇到這麼簡單的面試題,還是有一點“慌張”,怕是自己想的太簡單了吧!今天我們就來處理幾道小題,並且深入探討一下交換兩整形的3種C語言實現方法!當你再遇到這種問題的時候,你將一點都不慌!你,穩得一批! 練習題目: 1. 給定兩個整形

關於交換兩個變數值的三方法

1,臨時變數法: temp=A; A=B; B=temp; 2,求差法: A=A-B; B=A+B; //B=A-B+B=A A=B-A; //A=A-A+B 3,異或法: A=A^B; B=A^B; //B=A^B^B=A A=A^B; //A=A^B^A=B 第一種方法最

交換兩個數的方法

code alt pre temp emp 分享圖片 splay lin ons 第一種:利用第三方變量 1 int a = 10, b = 12; 2 int temp = 0; 3 temp = a; 4 a = b; 5 b = temp; 6 Console.W

Java基礎中Int型別變數值互換的方法

    在很多時候,我們會使用到將兩個整型變數值進行互換,比如氣泡排序,通過判斷來將陣列變數的值逐步交換,那麼怎麼交換值才能最有效最節省空間呢?   首先,我們會想到的,用一個零時變數來做中間的過度儲存空間,這是很容易想到的方法,實現如下:       int i = 10;  //宣告變數 i,並給 i 賦

php頁面傳遞引數值方法總結

又搞了一個學期的php,就這樣吧。      php是一種伺服器的指令碼語言,他也是現在最為流行的WEB開發語言,下面我們來講述一下幾種上在php開發應用中常用的四種頁面之間傳遞引數的幾種方法。    第一種:使用客戶端瀏覽器的cookie。cookie很容易理解,就是一個臨時檔案,可以把它看成一個儲藏室,瀏

交換兩個整數數值的三方法

如何交換兩個整數數值? 1.藉助第三個變數實現 (最常用的做法) int a = 100; int b = 200; int c; c = a; a = b;

線程同步的方法

並且 word 進行 void 等待 輸出結果 每次 wait 無法訪問 用什麽關鍵字修飾同步方法 ? 用synchronized關鍵字修飾同步方法 同步有幾種實現方法,都是什麽?分別是synchronized,wait與notify wait():使一個線程處於等待狀

SQL Server遍歷表的方法

都是 遍歷 lec delet -s rop itl 想要 temp  在數據庫開發過程中,我們經常會碰到要遍歷數據表的情形,一提到遍歷表,我們第一印象可能就想到使用遊標,使用遊標雖然直觀易懂,但是它不符合面向集合操作的原則,而且性能也比面向集合低。當然,從面向集合操作的角

Html中嵌套其他HTML文件的方法(轉)

java mar net rip gin bsp ace wid style 給大家整理了3個方法,一個是HTML的iframe標簽,別兩個是JS引用。比如要在arr.html文件裏引用index.html文件,方法如下。 HTML引用方法: <iframe na

將HTML5封裝成android應用APK文件的方法

android作為下一代的網頁語言,HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在於能夠實現跨平臺遊戲編碼移植,現在已經有很多公司在移動 設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普,HTML5技術有著非常好的發展前景,甚至有人預言HTML5將引燃 移動平臺遊

C#多線程的方法

task start invoke 數組 erl method 並行計算 bsp nbsp 1、Theard2、TheardPool 線程池3、Task 在Theard上做了優化和改進,建議使用 .start();4、Task.Factory.Start(method)

Java中創建數組的方法

java false 三種 數組下標 [1] [] 判斷 color str Java中創建數組的幾種方法 public static void main(String[] args) { //創建數組的第一種方法 int[] arr=new int[6]; int

克隆對象的方法

克隆 type sharp class 以及 each pcl 反射 tor   克隆對象在開發過程中經常會遇到,有些時候需要淺克隆,有些時候需要深克隆,具體它們之間有什麽區別,以及實現方式有哪些,在這裏總結一下。   實現深克隆有以下幾種方法。 手動 代碼如下:

windows系統字體安裝使用的方法

windows ps 字體簡易安裝方法:1、打開系統盤的 windows 下的 fonts 文件夾;2、用另一個窗口打開字體存放的文件夾;3、在存放字體的文件夾中選擇要安裝的字體(部分選或全選均可);4、用鼠標右鍵將所選字體拖到windows 下的 fonts 文件夾上,松開鼠標,在彈出的提示框上選擇