当前位置: 首页 > wzjs >正文

网页制作与网站建设 在线作业seo搜索排名

网页制作与网站建设 在线作业,seo搜索排名,做一个互联网平台需要多少钱,wordpress文章归档插件29. 两数相除 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 &#x…

29. 两数相除

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

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

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

注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231, 231 − 1] 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。

https://leetcode.cn/problems/divide-two-integers/description/

方法二、根据递归法总结进行化简

首先根据方法一里面的描述,我们已经理解 并得出了这个递归的过程,所以我们来进一步优化迭代的运算,

为了节省函数调用次数,用循环来代替递归的过程即可
我们先找到最大的那个可以减去的数字,
然后再进行右移找尽可能大的那个可以减去的数字

有一个细节是要把整数变成负数后再进行运算,因为补码的表示范围中,负数比正数多出来一位
因此用减法运算可以减少边界判断的次数。

我在代码里使用了移位,

maxSub <<= 1; // 被除数翻倍
// 也可以写成 maxSub+=maxSub;

上下两种写法效果和结果完全一样,
移位据说更省,

但是我想现代的编译器,应该会自己优化这样的运算。

if (ratio == 0) {ratio = 1;
}

这里的判断不可以省略,
因为32/2 = (32-16-8-4-2-2)/2 +8+4+2+1+1= 8+4+2+1+1 = 16
否则会输出15,答案错误

在这里插入图片描述

class Solution {
public:int divide(int dividend, int divisor) {// 处理边界情况if (dividend == INT_MIN && divisor == 1)return INT_MIN;if (dividend == INT_MIN && divisor == -1)return INT_MAX;if (divisor == 0)  // 除0是非法的return 0;// 两个正数,得到signal true,一正一负,都得到signal// false,两个负数得到signal true;bool signal = true;if (dividend > 0) {dividend = -dividend;signal = !signal;}if (divisor > 0) {divisor = -divisor;signal = !signal;}int maxSub = divisor;int ans = 0, ratio = 1;// 注意下面的计算都是负数!while (maxSub > dividend - maxSub) {maxSub <<= 1; // 被除数翻倍// 也可以写成 maxSub+=maxSub;ratio <<= 1;  // 倍率翻倍}// 先移动到最左边找到了最大的ratiowhile (dividend <= divisor) {// 逐步右移回去if (dividend - maxSub >= maxSub && dividend - maxSub <= 0) {ans += ratio; // 如果找到了当前合适的最大的maxSub就扣除并添加倍率dividend -= maxSub;}maxSub = maxSub >> 1;ratio = ratio >> 1;if (ratio == 0) {ratio = 1;}}if (!signal) {return -ans;}return ans;}
};

方法一、递归法:

例如10/3 = (10-6-3)/3+2+1 这个等式成立

所以我们应该先去找一个最小的X,使得X*2大于等于10,可以知道X=3,6,12,24,48……这样翻倍,
由于当X = 6的时候12大于10,此时可以进行运算10-6 = 4,

运算后剩下4,再对4重复上面的过程,4-X<3可知X=3,

因此可以每次都X+=X,并且假设ans=1跟着X每次都ans+=1,

  • X=3 ,ans=1
  • X=6,ans=2;
  • X=12, ans=4;
  • X=24,ans =8 (3*8=24) 这说明这个ans就是我们要求和的值。

因此可以找到10/3的时候,ans = 2+1+0 = 3,也就是我们的10/3的答案。

在这里插入图片描述

class Solution {
public:int divide(int dividend, int divisor) {if (divisor == 0) {return 0;}//处理特殊情况,边界情况if (dividend == INT_MIN && divisor == 1) {return INT_MIN;}if (dividend == INT_MIN && divisor == -1) {return INT_MAX;}// 全都变成负数,然后再做加减法if (dividend > 0)return -divide(-dividend, divisor);if (divisor > 0)return -divide(dividend, -divisor);if (dividend > divisor) {return 0;}int maxSub = divisor;int ans = 1; // 每次都加上这个最大的倍数while (dividend - maxSub <= maxSub) {maxSub += maxSub;ans += ans;}return ans + divide(dividend - maxSub, divisor);}
};
http://www.dtcms.com/wzjs/151528.html

相关文章:

  • 镇政府网站平台建设方案百度seo价格
  • 红酒网站建设方案范本北京网站seo招聘
  • wordpress 插件 块上海seo公司哪家好
  • 北海教网站建设百度免费注册
  • 来个可以做渗透的网站最新经济新闻
  • 泰州seo顾问服务seo网站排名
  • 如何提升wordpress的打开速度淄博网站seo
  • 网站认证费怎么做分录火星时代教育培训机构学费多少
  • 网站制作怎么做下拉菜单汽车网络营销策划方案
  • 武汉网站制作公司石家庄seo外包公司
  • 分类网站模板单词优化和整站优化
  • 做海外正品代购的十个网站_百度竞价怎么做
  • 日语网站建设需要注意什么国际新闻最新消息十条摘抄
  • 文字域名可以做网站好的推广方式
  • 福州网站优化公司网站建设公司业务
  • 用div做网站中间部分网络推广公司是干什么
  • 公司注册地址规定网站优化公司
  • 西安网站建设报价seo高级优化技巧
  • 做网站只做前端可以用吗手机网站制作教程
  • 整容医院网站建设目的搜索关键词排名一般按照什么收费
  • 如何用快站做pc端网站软文例文 经典软文范例
  • 用手机做服务器做网站站长工具站长之家
  • 佛山怎么做网站怎么创建网站教程
  • 火锅料网站方案怎么做舆情服务公司
  • 那些平台可以给网站做外链淘宝付费推广有几种方式
  • 福州模板建站定制网站seo sem什么意思
  • 设计网站公司 讲湖南岚鸿查询域名注册信息
  • 网站开发完整项目案例网络营销方案
  • 深圳蚂蚁网络网站建设线上销售的方法和技巧
  • html中音乐网站怎么做湖南专业关键词优化服务水平