1. 程式人生 > >劍指Offer——不用加減乘除求兩個整數之和 + 不使用新的變數交換變數a,b

劍指Offer——不用加減乘除求兩個整數之和 + 不使用新的變數交換變數a,b

1.求和主要思路 利用異或 和移位操作實現 2.交換主要思路  ①:基於加減法          a = a+b;          b = a-b;          a = a-b; ② :基於異或運算          a = a^b;          b = a^b;          a = a^b; 以下為求和的程式碼,在VS2015中除錯執行無誤
#include "stdafx.h"
#include<iostream>
using namespace std;

int Add(int num1, int num2)
{
	int sum;
	int carry;
	do
	{
		sum = num1^num2;
		carry = (num1 & num2) << 1;
		num1 = sum;
		num2 = carry;
	}
	while (num2 != 0);
	return num1;
}

int main()
{
	int num1;
	int num2;
	while (1)
	{
		cin >> num1 >> num2;
		cout << "num1+num2 =" << Add(num1, num2);
	}
	return 0;
}


相關推薦

Offer——不用乘除整數之和 + 使用變數交換變數a,b

1.求和主要思路 利用異或 和移位操作實現 2.交換主要思路  ①:基於加減法          a = a+b;          b = a-b;          a = a-b; ② :基於異或運算          a = a^b;          b = a^

offer---不用乘除做加法

logs class int col clas off urn turn spa class Solution { public: int Add(int num1, int num2) { while (num2--) {

Offer - 不用乘除做加法

sub 題目 return 加減乘除 describe body col style blog 題目描述 寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號. 代碼: class Solution { public: int

offer——不用乘除做加法

不用 odin www coder rank page -i offer quest 不用加減乘除做加法 不會劍指offer——不用加減乘除做加法

offer——不用乘除做加法(按位與和異或)

class Solution { public: int Add(int num1, int num2) { while(num2 != 0){//若需要進位 int sum = num1 ^ num2;//異或,01=1,00=0,11=

offer----不用乘除做加法

題目描述 寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。 //拿101和111舉例說明 //n1為1010,即只標記了進位之後為1的位置,即101和111的最高為都為1, //即從右向左第三位都為1,則進位到第四位,則進位標記的第

offer:不用乘除做加法(java)

題目:寫一個函式,求兩個整數之和,要求在函式體內不得適用+,-,* ,./  四則運算子號     面試的時候被問道這個問題,首先我們分析人們是如何進行十進位制的加法的,比如如何得出5+17=22這個結果的,實際上,我們可以分三步進行:第一步只做各位相加不進位,此時相加

offer____不用乘除做加法

寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。 方法一:位運算 class Solution { public: int Add(int num1, int num2) { /* if(num2 == 0) r

offer48---不用乘除做加法

題目描述 寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。 這個題考位運算,位運算其實是非常常見的。  趕緊複習一下位運算的東西吧https://blog.csdn.net/zj15527620802/article/details/80367

offer——面試題15.2:判斷整數m和n的二進制中相差多少位

end aps alt 試題 namespace different hide 判斷 img 1 #include"iostream" 2 using namespace std; 3 4 int CountDifferentBit(int m,int n)

Offer》題目:合並排序的鏈表

合成 sorted 合並 邊界情況 logs pub st2 next null 題目描述:輸入兩個單調遞增的鏈表list1,list2,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 題目分析: 1.對於鏈表題目,首先考慮邊界情況,即鏈表為空的情況,

offer十六之合並排序的鏈表

gif 虛線 tno 合並鏈表 -- class sed net isp 一、題目   輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 二、思路   註:鏈表1和鏈表2是兩個遞增排序的鏈表,合並這兩個鏈表得到升序鏈表為鏈表3.

Offer值和為S的數字

題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 思路 l表示左側位置,r表示右側位置。不斷向中間靠攏,如果array[l]+array[r] == sum,則找到正確結果,如果l>

offer 42. 和為s的數字

原題 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 Reference Answer 思路分析 設定兩個指標,一個指向陣列的起點

offer】面試題9:用棧實現佇列【C++版本】

題目: 用兩個棧實現佇列 用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個成員函式,分別完成在佇列尾部插入節點和在佇列的頭部刪除節點 class solution { public: void push(int node);

offer)和為S的數字

時間限制:1秒 空間限制:32768K 熱度指數:153416 題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 import jav

Offer-57 和為S的數字

題目: 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 解答: # -*- coding:utf-8 -*- class Solution(o

offer:和位s的數字(java)

/** * 題目: * 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S, * 如果有多對數字的和等於S,輸出兩個數的乘積最小的 * 解題思路: * 具體見程式碼 */ import java.util

牛客網線上程式設計專題《offer-面試題17》合併排序的連結串列

題目連結: 題目描述: 解題思路: (1)方法一: 修改兩個待合併連結串列的引用域,使它們稱為一個有序的連結串列list3。具體思路如下圖所示: 已經AC的程式碼: public class MergeLinkedList { // 定義結點

offer第五題】用棧實現佇列

 棧的實現是先進後出,佇列是先進先出。思路就是第一個棧的元素按次序出棧,然後第二個棧依次入棧,然後出棧。 import java.util.Stack; public class Solution