麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

leecode 解題總結:29 Divide Two Integers

2019-11-14 12:20:20
字體:
來源:轉載
供稿:網友
#include <iostream>#include <stdio.h>using namespace std;/*問題:Divide two integers without using multiplication, division and mod Operator.If it is overflow, return MAX_INT.分析:除以兩個整數不能使用乘法,除法,模運算。溢出需要返回MAX_INT。顯然,應該使用位操作了。除法的位操作,例如: 8/2=4, 9/2=4分析: a + b 如果不用除法,需要使用-關鍵:實際上可以將除法轉化為減法,比如9-2=7,7-2=5,5-2=3,3-2=1,1<2,則最后的那一次不算因此總共a / b的結果等于  a-b > b的次數需要先提取出符號,,-9/2=-4那么之所以會溢出:就應該是:減法造成的溢出,而且是兩個不同的數相減,提取出符號,讓同號數相減就不會溢出輸入:8 29 2-9 20 22 0輸出:44-40極大值關鍵:1 除法的溢出問題: -2147483648 / (-1) = 2147483648		if(INT_MIN == dividend && -1 == divisor)		{			return INT_MAX;		}2實際上可以將除法轉化為減法,比如9-2=7,7-2=5,5-2=3,3-2=1,1<2,則最后的那一次不算3 long long dvd = labs(dividend);//如果是 -2147483648,會溢出,所以必須用long long,還必須用labs4 可以嘗試移動左移除數,使得除數放大,很快到達是否比被除數大的條件,因此,注意每左移一次,放大兩倍  減去最大的不超過被除數的左移后的除數后,仍然需要對剩余被除數重復上述操作		long long dvd = labs(dividend);//如果是 -2147483648,會溢出,所以必須用long long,還必須用labs		long long dvs = labs(divisor);		int result = 0;		while( dvd >= dvs )		{			long long temp = dvs;			long long multiple = 1;			while(dvd >= (temp << 1))			{				temp <<= 1;//左移				multiple <<= 1;//結果次數左移			}			dvd -= temp;//被除數減去除數倍數最大值			result += multiple;		}*/class Solution {public:	//dividend:被除數,divisor:除數。24/8=3中,其中24是被除數    int divide(int dividend, int divisor) {		if(0 == divisor)		{			return INT_MAX;		}		if(0 == dividend)		{			0;		}		//除法的溢出問題: -2147483648 / (-1) = 2147483648		if(INT_MIN == dividend && -1 == divisor)		{			return INT_MAX;		}		int symbol;		if( ( dividend >= 0 && divisor >= 0 ) || ( dividend < 0 && divisor < 0 ) )		{			symbol = 1;		}		else		{			symbol = -1;		}		long long dvd = labs(dividend);//如果是 -2147483648,會溢出,所以必須用long long,還必須用labs		long long dvs = labs(divisor);		int result = 0;		while( dvd >= dvs )		{			long long temp = dvs;			long long multiple = 1;			while(dvd >= (temp << 1))			{				temp <<= 1;//左移				multiple <<= 1;//結果次數左移			}			dvd -= temp;//被除數減去除數倍數最大值			result += multiple;		}		result *= symbol;		return result;    }};void PRocess(){	int dividend;	int divisor;	Solution solution;	while(cin >> dividend >> divisor)	{		int result = solution.divide(dividend , divisor);		cout << result << endl;	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线播放免费人成毛片乱码 | 91 视频网站 | 黄色大片大毛片 | 91久久久久久亚洲精品禁果 | 一级做a在线观看 | 97se亚洲综合在线韩国专区福利 | 天天看成人免费毛片视频 | 鲁丝片一区二区三区免费入口 | 九九热视频这里只有精品 | 久久亚洲精品久久国产一区二区 | 精品国产一区二区三区四区阿崩 | 日韩一级网站 | 欧美 videos粗暴 | 欧美一级三级在线观看 | 日本不卡视频在线观看 | 免费放黄网站在线播放 | 国产成人综合在线视频 | japanese hot milf free av | 国产精品刺激对白麻豆99 | 一区二区久久精品66国产精品 | 久久精品亚洲欧美日韩精品中文字幕 | 国产艳妇av视国产精选av一区 | 国产女厕一区二区三区在线视 | 91网视频 | 久久精品中文字幕一区 | 成人做爽爽爽爽免费国产软件 | 午夜视频免费播放 | 成人一级免费视频 | 成人一级视频 | 一级毛片看 | www.48xx.com| 精品国产一区二区三区久久久蜜月 | 天天都色视频 | 羞羞的视频免费在线观看 | 亚洲一区二区中文字幕在线观看 | 日本黄色大片免费 | 一区二区三区四区视频在线观看 | 久久9999久久| 天堂成人国产精品一区 | 91网站免费观看 | 午夜男人在线观看 |