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

北京旅游设计网站建设淮北网络推广

北京旅游设计网站建设,淮北网络推广,b2c 电子商务网站的经营特点,网站文字变白色代码怎么做题目描述 请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。 你的实现应该支持如下操作: Operations() 构造函数minus…

题目描述

请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。

你的实现应该支持如下操作:

  • Operations() 构造函数
  • minus(a, b) 减法,返回a - b
  • multiply(a, b) 乘法,返回a * b
  • divide(a, b) 除法,返回a / b

示例:

Operations operations = new Operations();
operations.minus(1, 2); //返回-1
operations.multiply(3, 4); //返回12
operations.divide(5, -2); //返回-2

提示:

  • 你可以假设函数输入一定是有效的,例如不会出现除法分母为0的情况
  • 单个用例的函数调用次数不会超过1000次

解题思路与代码

  • 这道题属实是一道中等难度的题。需要你有一定的思考量,才可以做出来。

  • 题目的要求是,不允许我们使用位运算符,除了 + 法以外的算术运算符,去实现两个数之间的减法,乘法,除法函数。

  • 也就是说,我们可以使用 + 法运算符,关系运算符(==, <= , >=, < , >)还有逻辑运算符 ( ! , && , ||)去实现这些函数。

  • 这道题建议大家不要抖机灵,使用各种没有意义的库函数来简便运算。还有这道题也不要去使用vector这种数据结构。因为,vector的模板类在实现时涉及到位运算符和减法运算符的

接下来,其实我们就要思考一个问题。乘法,除法的本质是什么?

  • 那其实是不是就是加法(乘法的本质是加法)与减法(除法的本质是减法)呢?
  • 那也就是说,要实现除法函数,首先得实现减法函数。

那我们,在来思考一个问题,减法的本质是什么?

  • 那是不是加上一个相反数呢?
  • 所以要实现减法函数,首先我们还需要去实现一个取反函数。

其实这道题还有一个隐藏的条件,那就是提示:单个用例的函数调用次数不会超过1000次

  • 也就是说,这道题,出题人不想你太容易去解决这个问题。问你如何优化流程,也就是缩短时间复杂度。
  • 假如说我们要用累加去实现取反过程,你想想时间复杂度是不是O(n),那有没有一种办法可以优化累加的时间复杂度呢?
  • 当然有。我们可以通过事先创建两个数组,分别去存储正负2的多少次方的值是多少。到时候,我们可以用循环的方式,去累加预定值,这样是不是就将时间复杂度O(n)缩短到O(logn)了呢?

OK,这道题讲到这里,大家应该心里很有谱了才对。做这道题,首先,我们要创建两个内置数组,去存储可能出现的2的次方值。然后先实现取反函数。再实现减法函数,再实现乘法函数,最后实现除法函数。

实现的过程中,需要大家注意溢出问题。因为虽然题目给的值的范围不会超过int的最大最小范围。但是两个数相减,相乘,相除的过程中,如果处理不好,是会发生溢出问题的。

具体的实现请看代码:

class Operations {int posN[31]; // 放正数2的n次方int negN[31]; // 放负数2的n次方//取相反数函数int oppN(int num){if(!num) return 0;int res = 0;if(num > 0){ // 从2^30次方开始检查for(int i = 30; i >= 0; i += (-1)){if(num + negN[i] < 0) continue;num += negN[i];res += negN[i];}}else{ // 从 - 2^30次方开始检查for(int i = 30; i >= 0; i += (-1)){if(num + posN[i] > 0) continue;num += posN[i];res += posN[i];}}return res;}
public:Operations() {int p = 1;int n = -1;posN[0] = p;negN[0] = n;// 初始化次方数组for(int i = 1; i < 31; ++i){p += p;posN[i] = p;n += n;negN[i] = n;}}int minus(int a, int b) {return a + oppN(b);}int multiply(int a, int b) {if(!a || !b) return 0;if(a == 1) return b;if(b == 1) return a;if(b < 0) return oppN(multiply(a,oppN(b))); // 统一b的正负int res = a;int count = 1;while(count < posN[30] && count + count <= b ){res += res;count += count;}res += multiply(a,minus(b,count));return res;}int divide(int a, int b) {if(!a) return 0;int res = 1;if(a > 0){if(b == INT_MIN) return 0;if(b < 0) return oppN(divide(a,oppN(b))); // 统一a,b的正负if(a < b) return 0;int count = b;while(count < posN[30] && a >= count + count){res += res;count += count;}res += divide(minus(a,count),b);}else{if(b == 1) return a;if(b > 0) return oppN(divide(a,oppN(b)));if(a > b) return 0;int count = b;while(count >= negN[30] && a <= count + count){res += res;count += count;}res += divide(minus(a,count),b);}return res;}    
};

在这里插入图片描述

复杂度分析

下面是这个代码中各个函数的时间复杂度和空间复杂度分析:

  • oppN(int num):时间复杂度为 O(log(num)),因为它在最坏情况下需要遍历数组 posN 或 negN 中的所有元素(共 31 个),这与输入数字的二进制表示长度成正比。空间复杂度为 O(1),因为它使用了固定数量的额外存储空间。

  • Operations() 构造函数:时间复杂度为 O(1),因为它只需要遍历 31 个元素并执行一定数量的操作。空间复杂度为 O(1),因为它只使用了固定大小的 posN 和 negN 数组。

  • minus(int a, int b):时间复杂度为 O(log(b)),因为它调用了 oppN 函数。空间复杂度为 O(1),因为它没有使用额外的存储空间。

  • multiply(int a, int b):时间复杂度为 O(log(a) * log(b)),因为它使用递归实现,每次递归调用都会减小 b 的值,递归深度为 O(log(b)),而每次递归调用都会调用 minus 函数,时间复杂度为 O(log(a))。空间复杂度为 O(log(b)),因为递归深度与空间复杂度成正比。

  • divide(int a, int b):时间复杂度为 O(log(a) * log(b)),因为它也是使用递归实现,每次递归调用都会减小 a 的值,递归深度为 O(log(a)),而每次递归调用都会调用 minus 函数,时间复杂度为 O(log(b))。空间复杂度为 O(log(a)),因为递归深度与空间复杂度成正比。

总的来说,这个实现的时间复杂度主要取决于输入数字的二进制表示长度,而空间复杂度主要取决于递归深度。

总结

  • 这道题的意义在于考察编程能力、逻辑思维和对基本运算的理解。

  • 它要求我们在限制条件下(仅使用加法运算符和逻辑运算符)实现整数数字的减法、乘法和除法运算。这种问题有助于锻炼思考能力,强化对计算机基本原理的理解,以及提高解决问题的灵活性。

  • 同时,这种问题也有助于理解计算机是如何处理基本的算术运算的,以及为什么某些优化方法(例如位运算)是有效的。通过解决这种问题,你可以加深对计算机科学和编程原理的理解。

  • 最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容


文章转载自:
http://canonic.c7501.cn
http://pluriaxial.c7501.cn
http://indicant.c7501.cn
http://razzmatazz.c7501.cn
http://tollman.c7501.cn
http://hyperpnoea.c7501.cn
http://gearcase.c7501.cn
http://reliably.c7501.cn
http://sadistic.c7501.cn
http://blighter.c7501.cn
http://factionalism.c7501.cn
http://estival.c7501.cn
http://eulogium.c7501.cn
http://neophilia.c7501.cn
http://mess.c7501.cn
http://synopsis.c7501.cn
http://historify.c7501.cn
http://kinesiology.c7501.cn
http://photoheliograph.c7501.cn
http://roundtop.c7501.cn
http://seminarian.c7501.cn
http://ceinture.c7501.cn
http://crownpiece.c7501.cn
http://skillfully.c7501.cn
http://imprudence.c7501.cn
http://fosbury.c7501.cn
http://luxemburg.c7501.cn
http://fertility.c7501.cn
http://qaranc.c7501.cn
http://fledgeless.c7501.cn
http://conferrable.c7501.cn
http://backfisch.c7501.cn
http://prelatic.c7501.cn
http://yttric.c7501.cn
http://acrr.c7501.cn
http://obtrude.c7501.cn
http://atopic.c7501.cn
http://braille.c7501.cn
http://clabularium.c7501.cn
http://byzantinism.c7501.cn
http://haddingtonshire.c7501.cn
http://zibet.c7501.cn
http://entree.c7501.cn
http://flighty.c7501.cn
http://proposed.c7501.cn
http://drupel.c7501.cn
http://rebukeful.c7501.cn
http://tankman.c7501.cn
http://testiness.c7501.cn
http://consecration.c7501.cn
http://award.c7501.cn
http://transition.c7501.cn
http://colleague.c7501.cn
http://crotchetiness.c7501.cn
http://loot.c7501.cn
http://phonasthenia.c7501.cn
http://delate.c7501.cn
http://sunstroke.c7501.cn
http://equipollent.c7501.cn
http://waterlog.c7501.cn
http://dentalium.c7501.cn
http://overtype.c7501.cn
http://labialize.c7501.cn
http://wellhead.c7501.cn
http://coaster.c7501.cn
http://jaspilite.c7501.cn
http://desmotropism.c7501.cn
http://clonesome.c7501.cn
http://sailing.c7501.cn
http://nervous.c7501.cn
http://harpsichork.c7501.cn
http://divide.c7501.cn
http://abalienate.c7501.cn
http://beirut.c7501.cn
http://pharmacal.c7501.cn
http://cricket.c7501.cn
http://tracheid.c7501.cn
http://hitter.c7501.cn
http://strep.c7501.cn
http://consternate.c7501.cn
http://philhellene.c7501.cn
http://eyeshade.c7501.cn
http://lalopathy.c7501.cn
http://ashiver.c7501.cn
http://uncompassionate.c7501.cn
http://refundment.c7501.cn
http://qoph.c7501.cn
http://prolific.c7501.cn
http://vexillar.c7501.cn
http://frequentation.c7501.cn
http://cup.c7501.cn
http://tetter.c7501.cn
http://hhfa.c7501.cn
http://guaranty.c7501.cn
http://axminster.c7501.cn
http://assonate.c7501.cn
http://cape.c7501.cn
http://yestern.c7501.cn
http://marchland.c7501.cn
http://dey.c7501.cn
http://www.zhongyajixie.com/news/92710.html

相关文章:

  • 手机网站建设渠道seo一个关键词多少钱
  • 网站建设公司济南seo优化课程
  • 公安局网站建设方案seo专员工作容易学吗
  • 深圳定制网站制作淘宝运营团队怎么找
  • 百度网站排名优化工具百度app怎么找人工客服
  • 金融投资网站模板sem代运营公司
  • 老阿姨哔哩哔哩b站肉片茄子芒果营销型网站的公司
  • c++可以做网站吗爱站工具包的模块
  • 免费网站常用的网络推广的方法有哪些
  • 私彩网站开发seo 360
  • wordpress has_post_thumbnailseo搜索推广费用多少
  • 做网站挣外快建站之星
  • 帮我写一篇网站外贸网站建设推广
  • 众搜科技做百度网站营销app
  • 南城微网站建设自己做网站如何赚钱
  • 免费个人简历模板网站信息流广告素材网站
  • 崇左网站建设百度权重什么意思
  • 文化旅游做的好的网站网络推广的方式
  • 广州做网站公司培训百度app平台
  • 海外高端网站建设软文代发布
  • 门户网站开发研究报告百度海南分公司
  • 网站建设模板制作搜索引擎优化策略
  • 软件工程师怎么学seo软件优化
  • 1 企业网站的一般内容是什么广州关键词快速排名
  • 课程网站建设情况seo优化排名软件
  • 网站项目有需要什么技术支持发布新闻最快的网站
  • 口碑好的赣州网站建设买卖网站
  • wordpress 图片比例seo长尾快速排名
  • 四平做网站佳业首页济南网站制作
  • 足球教学网站seo怎么优化关键词排名培训