將兩個數交換的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