您的位置:首页 > 游戏 > 手游 > 建设企业网站流程_中信建设有限责任公司招投标_国外推广网站_seo新人怎么发外链

建设企业网站流程_中信建设有限责任公司招投标_国外推广网站_seo新人怎么发外链

2024/12/23 16:17:32 来源:https://blog.csdn.net/2401_82648291/article/details/142681688  浏览:    关键词:建设企业网站流程_中信建设有限责任公司招投标_国外推广网站_seo新人怎么发外链
建设企业网站流程_中信建设有限责任公司招投标_国外推广网站_seo新人怎么发外链

目录

一·简介:

二·例题讲解:

2.1不用加号的加法:

2.1.1题目:

2.1.2思路汇总:

2.1.3代码解答:

2.2两数相除:

2.2.1题目:

2.2.2思路汇总:

2.2.3代码解答:


一·简介:

本篇为两道例题带你用位操作符完成取代加号和除号运算符,满满干活,细细解答,通俗易懂,浑然通透版本。

二·例题讲解:

2.1不用加号的加法:

2.1.1题目:

leetcode 题目链接: . - 力扣(LeetCode)

2.1.2思路汇总:

思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数下面,后面直接再次异或即相当于进位了,然后这里就要里用循环+

重新赋值了,当再次进位可能会出现还要进位的情况,因此这选择了循环,直到不需要进位即结束,也就是这里对应得到进位的变量是0就可。

如14和5:1110,0101

2.1.3代码解答:

class Solution {
public:int add(int a, int b) {while(b!=0){int ans1=(a^b);//得到未进位的加后的数int ans2=(a&b)<<1;//得到要进的位左移相当于给它进位后,下面直接以后即再次未进位相加a=ans1;//未进位的数b=ans2;//对应进完位的位,后面直接异或}return a;}
};

2.2两数相除:

2.2.1题目:

leetcode原题链接:. - 力扣(LeetCode) 

2.2.2思路汇总:

思路:此题明显是让用位移符,这里要想到<< 有乘^n的作用,而>>有除2^n的作用,因此可以利用这点完成,这里的除法就是把dd转化成2^n(最大)乘一个大于或等于dr的数,那么

我们就可以知道它的余数肯定大于这个2^n,故可以先把这个余数的一部分加上,然后dd减去这部分余数乘dr,也就是求完余数的一部分,转化成另一个数对它得余数了,最后叠加就好

依次重复操作,最后得出即可,这里我们是倒序的因为要得到最大的这个2^n然后可以保证后面重复操作时候这个n一定小于上一次n。

细节问题:最大最小值处理以及正负号

一个式子解释如:17 /2: 2^4/2+1/2==8

2.2.3代码解答:

class Solution {
public:int divide(int dividend, int divisor) {int count=0;if(dividend==0) return 0;int flag=1;if(dividend==INT_MIN&&divisor==-1) return INT_MAX;//这里如果不这么操作最后返回的是-INT_MIN,超出int限制if(dividend==INT_MIN&&divisor==1) return INT_MIN;//这里如果没有,则后面直接abs INT_MIN,直接整型溢出了if((dividend^divisor)<0) flag=-1;//判断最后的正负long  dd=abs(dividend);long  dr=abs(divisor);for(int n=31;n>=0;n--){if(dd>>n>=dr) {//得到最大的2^ncount+=1<<n;//叠加这个2^ndd-=dr<<n;//下一次用去除得到部分余数的数再次循环,最会叠加count}}return flag==1?count:-count;}
};

以上就是刷题时所遇问题,解答汇总希望对您有助! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com