LeetCode(29)Divide Two Integers
题目
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析
题目要求不用 * / %三种运算符的条件下,求得两个int类型整数的商。
方法一:
很明显的,我们可以用求和累计的方法,求得商,但是该方法测试会出现TLE;参考博客提出解决办法:每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作,但是我测试结果依然是TLE。所以这道题的目的在于考察逻辑运算。
方法二:
该方法来源于参考博客但是该实现忽略了结果溢出的问题,需要加上结果是否溢出判断。
TLE(方法一)代码
//方法一,翻倍累和 结果是:Time Limit Exceeded
class Solution {
public:
int divide(int dividend, int divisor) {
//如果被除数或者除数有一者为0 或者绝对值除数大于被除数则返回0
if (dividend == 0 || divisor == 0 || abs(divisor) > abs(dividend))
return 0;
int sign = ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) ? 1 : -1;
long long Dividend = abs(dividend), Divisor = abs(divisor);
long long sum = 0;
int count = 0, ret = 0;
while (Divisor <= Dividend)
{
count = 1;
sum = Divisor;
while ((sum + sum) < Dividend)
{
sum += sum;
count += count;
}
Dividend -= sum;
ret += count;
}
if (sign == -1)
return 0 - ret;
else
return ret;
}
};
AC代码
//方法二:位运算
class Solution {
public:
int divide(int dividend, int divisor) {
//如果被除数或者除数有一者为0 或者绝对值除数大于被除数则返回0
if (dividend == 0 || divisor == 0)
return 0;
// without using * / mod
// using add
auto sign = [=](long long x) {
return x < 0 ? -1 : 1;
};
int d1 = sign(dividend);
int d2 = sign(divisor);
long long n1 = abs(static_cast<long long>(dividend));
long long n2 = abs(static_cast<long long>(divisor));
long long ans = 0;
while (n1 >= n2) {
long long base = n2;
for (int i = 0; n1 >= base; ++i) {
n1 -= base;
base <<= 1;
ans += 1LL << i;
}
}
//如果转换为int类型,结果溢出,返回INT_MAX ,int类型表示范围[-2147483648 , 2147483648)
if (ans > INT_MAX && d1 == d2)
return INT_MAX;
int res = static_cast<int>(ans);
if (d1 != d2)
return -res;
else
return res;
}
};
LeetCode(29)Divide Two Integers的更多相关文章
- LeetCode(29): 两数相除
Medium! 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor ...
- Leetcode(29)-两数相除
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode(29)-Plus One
题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...
- LeetCode(220) Contains Duplicate III
题目 Given an array of integers, find out whether there are two distinct indices i and j in the array ...
- LeetCode(4)Median of Two Sorted Arrays
题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- JMS生产者+单线程发送-我们到底能走多远系列(29)
我们到底能走多远系列(29) 扯淡: “然后我俩各自一端/望着大河弯弯/终于敢放胆/嘻皮笑脸/面对/人生的难” --- <山丘> “迎着风/迎向远方的天空/路上也有艰难/也有那解 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(29)-T4模版
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(29)-T4模版 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一 ...
- Windows Phone开发(29):隔离存储C
原文:Windows Phone开发(29):隔离存储C 本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东--用户设置. 当然了,可能翻译为应用程序设置合适一些,不 ...
- Qt 学习之路 2(29):绘制设备
Qt 学习之路 2(29):绘制设备 豆子 2012年12月3日 Qt 学习之路 2 28条评论 绘图设备是继承QPainterDevice的类.QPaintDevice就是能够进行绘制的类,也就是说 ...
随机推荐
- POJ2486 Apple Tree 【树上背包】
一句话题意:一棵树,一共n个点,每个点上有一个权值,求从1出发,走k步,最多能遍历到的权值.可以往回走. 第一(二)道树上背包题,先是看了dalao的题解,改了一点就过样例了.然而....TLE??? ...
- A joke about regular expression
As the old computer science joke goes: “Let’s say you have a problem, andyou decide to solve it with ...
- 进击的Python【第十五章】:Web前端基础之DOM
进击的Python[第十五章]:Web前端基础之DOM 简介:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示 ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- K - KazaQ’s Socks
Bryce1010模板 #include <bits/stdc++.h> using namespace std; #define LL long long int main() { LL ...
- ACM_最小公倍数
Lowest Common Multiple Plus Time Limit: 2000/1000ms (Java/Others) Problem Description: 求n个数的最小公倍数. I ...
- shell 2 解析
---- shell 3 /home/oracle/utility/macro/call_autopurge_arch.sh Description: Call purge archive log f ...
- [ SDOI 2010 ] 古代猪文
\(\\\) Description 一句话题意: 设 \(x=\sum_{d|n} C_n^d\),求 \(G^x\pmod {999911659}\) . 从原题面大段语文中其实不难推出所求. \ ...
- poj2718 Smallest Difference
思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...
- CentOS7搭建LAMP
阿里云CentOS7.3搭建 Apache+MySQL+PHP环境 参考https://www.cnblogs.com/apro-abra/p/4862285.html 一.安装Apache 1. ...