{ "type": "code_options", "author": "https://github.com/begeekmyfriend/leetcode", "source": "solution.md", "exercise_id": "7d7aea05317f4fa29074594e49a0cccc", "keywords": "位运算,数学", "title": "两数相除", "desc": [ { "content": "\n

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

 

示例 1:

输入: dividend = 10, divisor = 3
输出:
3
解释:
10/3 = truncate(3.33333..) = truncate(3) = 3

示例 2:

输入: dividend = 7, divisor = -3
输出:
-2
解释:
7/-3 = truncate(-2.33333..) = -2

 

提示:

", "language": "markdown" } ], "answer": [ { "content": "", "language": "cpp" } ], "prepared": [ [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ] ], "template": { "content": "#include \nusing namespace std;\nclass Solution\n{\npublic:\n\tint divide(int dividend, int divisor)\n\t{\n\t\tint signal = 1;\n\t\tunsigned int dvd = dividend;\n\t\tif (dividend < 0)\n\t\t{\n\t\t\tsignal *= -1;\n\t\t\tdvd = ~dvd + 1;\n\t\t}\n\t\tunsigned int dvs = divisor;\n\t\tif (divisor < 0)\n\t\t{\n\t\t\tsignal *= -1;\n\t\t\tdvs = ~dvs + 1;\n\t\t}\n\t\tint shift = 0;\n\t\twhile (dvd > dvs << shift)\n\t\t{\n\t\t\tshift++;\n\t\t}\n\t\tunsigned int res = 0;\n\t\twhile (dvd >= dvs)\n\t\t{\n\t\t\twhile (dvd < dvs << shift)\n\t\t\t{\n\t\t\t\tshift--;\n\t\t\t}\n\t\t\tres |= (unsigned int)1 << shift;\n\t\t\tdvd -= dvs << shift;\n\t\t}\n\t\tif (signal == 1 && res >= INT_MAX)\n\t\t{\n\t\t\treturn INT_MAX;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn res * signal;\n\t\t}\n\t}\n};", "language": "cpp" }, "node_id": "dailycode-a6beddb2efc64ddc8a28e593dfefc807", "license": "csdn.net", "created_at": 1637894158, "topic_link": "https://bbs.csdn.net/topics/600470833" }