1. 程式人生 > >將兩個數交換的3種方法(異或法有陷阱!)

將兩個數交換的3種方法(異或法有陷阱!)

最常用的方法,程式碼如下:
int a=50,b=22,t;
t=a;
a=b;
b=t;


不使用額外空間的方法:(1)加減法 (2)異或法
(1)加減法程式碼如下:
int a=50,b=22,t;
a=a+b;
b=a-b;
a=a-b;


(2)異或法(是兩數交換所用時間最快的方法)
顧名思義,就是將兩個數異或,原理如下:
i^j^j=i;i^j^i=j。 
即一個數異或兩個相同的數的結果還是本身。
程式碼如下:
int a=50,b=22;
a=a^b;
b=a^b;
a=a^b;
但是異或法卻有一個特別值得注意的地方,當兩個需要交換的數相同時,異或法得到的兩個數都為0。
比如a=50,b=50,那麼a^b=0。
因此,使用異或法應該額外加一個處理方法即可。

相關推薦

個數交換3方法陷阱

最常用的方法,程式碼如下: int a=50,b=22,t; t=a; a=b; b=t;不使用額外空間的方法:(1)加減法 (2)異或法 (1)加減法程式碼如下: int a=50,b=22,t; a=a+b; b=a-b; a=a-b; (2)異或法(是兩數交換所用時間最快的方法) 顧名思義,就是將兩個數

交換個數的幾方法

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

交換個數的四方法

一.建立臨時變數        1.普通的方法:                  思路簡介:建立一個臨時變數,通過temp=a,a=b,b=temp來實現交換。                  缺點:這只是一種假交換,由於這只是在函式內部臨時變數間的交換,所以當函式退出

hibernate update 只更新部分字段的3方法其實我只想說第二

day query per 分享 cci bar .exe toc 技術分享 hibernate 中如果直接使用Session.update(Object o);會把這個表中的所有字段更新一遍。 比如: public class Teacher Test {

java保留位小數4方法轉載

cal AI maximum 保留兩位小數 tps 控制 .text int .html 喵喵最近經常遇到小數點保留的問題,轉載一篇Java裏面的幾種小數點位數控制方法。 這是轉載的原地址:https://www.cnblogs.com/chenrenshui/p/6128

欄佈局三方法親測有效

第一種: 只需要兩個div就能實現,主要原理是將第一個div設為浮動,並加上寬度,然後就可以實現兩欄佈局,並不需要設定第二個div的任何東西。程式碼如下: div{ height:500px; } #aside{

單鏈表整表建立的方法頭插和尾插

線性表可分為順序儲存結構和鏈式儲存結構順序儲存結構的建立,其實就是一個數組的初始化,即宣告一個型別和大小的陣列並賦值的過程。而單鏈表和順序儲存結構就不一樣,它的每個資料的儲存位置不需要像陣列那樣集中,它可以很散,是一種動態結構。對於每個連結串列來說,它所佔用的空間大小和位置並

子集生成的方法 增量構造 和 位向量

該演算法來自--劉汝佳的演算法競賽入門經典。書中介紹了兩種演算法的核心程式碼,但卻沒有逐過程詳細解說,另初學者看文字時很難看懂 遇到問題,是先要直接研究問題的細節呢還是先把問題搞清楚? 我認為絕對應該先學習如何去解決問題,構造方法的框架,而不是先去研究細節。 方法一: 思

Linux-C基礎知識學習:C語言作業-輸入個數個數交換,按升序輸出。

Linux基礎知識學習 C語言作業:輸入兩個數,利用函式、指標,排序後,按升序輸出。 #include <stdio.h> void swap(int *x,int *y){ //利

XP下自己動手重灌IE6.0的3方法建議第三,原創

重灌IE6.0                           需要的檔案的下載地址在最後↓↓↓↓↓↓↓↓↓ 百度一下,答案基本一致:(我的方法在後面) 方法1: 開啟“登錄檔編輯器”(開始——執行——regedit——確定), 依次展開[HKEY_LOCAL_ MA

方法遞迴,非遞迴實現單鏈表的逆轉

//普通方法實現連結串列的逆置 void reverseList(pNode *head) { pNode p, q, r; if (*head == NULL || (*head)->next == NULL) return; q = *head; p

Java定時任務的幾方法Thread 和 Timer,執行緒池

/**   * 普通thread   * 這是最常見的,建立一個thread,然後讓它在while迴圈裡一直執行著,   * 通過sleep方法來達到定時任務的效果。這樣可以快速簡單的實現,程式碼如

個數的最大值用函式指標變數呼叫函式

#include<stdio.h> int max(int a,int b) {  if(a>b)  return a;  else  return b; } int main() {     int x,y,z;     scanf("%d%d",&

遠端登入開發板的幾方法ssh,putty.exe,telnet,超級終端

Linux和Windows的遠端訪問均可通過ssh、telnet協議來完成. 一、Linux下的ssh遠端訪問 Linux下的遠端訪問是指本地虛擬機器遠端訪問區域網中的其它虛擬機器,可通過ssh

獲取唯一id的2方法 MD5+Base64 和 UUID簡單

在web 開發中  常常需要獲取一些唯一的id值,這時候可採用如下兩種方法中的一個獲取  --》 MD5+Base64 法: public String generateToken(){ //通過當前時間毫秒值和隨機函式 獲取一個隨機數 String token =

個數的最大公約數C ,Python,java實現

package practice; import java.util.Scanner; public class demo1 {public static void main(String args[]){System.out.print("輸入第一個數:");Scanner a=new Scanner(Sy

Unity實現通用的物體高亮閃爍的方法輪廓整體高亮閃爍

  一、匯入DoTween或DoTweenPro外掛到專案中 二、編寫一個控制物體輪廓高亮閃爍的指令碼,如下圖所示: using System.Collections; using System.Collections.Generic; using UnityEngine

【codechef】n個數,多少取法的值==m【二項式定理】

由於比賽還沒結束所以先不放題目了。。。(轉化題意:n個數,多少種取法的異或值==m ) 這道dp要寫得非常小心,考慮全面。第一發超時,原因是n=10^5,所以複雜度1024000,但是又想到所有數字都不超過1023,所以直接求每個數出現的次數就好。。 但是——這樣轉化之後,

[Java] 不使用第三個變數實現個整數型別變數互換運算子

在對變數進行互換時,通常的做法是建立一個臨時變數來共同完成互換,但臨時變數的建立增加了系統資源的消耗。 其實,如果需要交換的是兩個整數型別的變數,則可以使用異或運算子( ^ )進行互換。 imp

E - Hat-Xor 的用法'^'

滴答滴答---題目連結  Statements After having a wonderful time at the Carnival test festival, Jão and his friends decided to go for an after party in