您现在的位置是:首页 > 编程 > 

特殊的加法和除法(考察点为位操作符)

2025-07-19 18:47:55
特殊的加法和除法(考察点为位操作符) 一·简介:本篇为两道例题带你用位操作符完成取代加号和除号运算符,满满干活,细细解答,通俗易懂,浑然通透版本。二·例题讲解:2.1不用加号的加法:2.1.1题目:leetcode 题目链接: . - 力扣(LeetCode)2.1.2思路汇总: 思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数

特殊的加法和除法(考察点为位操作符)

一·简介:

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

二·例题讲解:2.1不用加号的加法:2.1.1题目:

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

2.1.2思路汇总:

思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数下面,后面直接再次异或即相当于进位了,然后这里就要里用循环+ 重新赋值了,当再次进位可能会出现还要进位的情况,因此这选择了循环,直到不需要进位即结束,也就是这里对应得到进位的变量是0就可。 如14和5:1110,0101

2.1.代码解答:代码语言:javascript代码运行次数:0运行复制
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.代码解答:代码语言:javascript代码运行次数:0运行复制
class Solution {
public:
    int divide(int dividend, int divisor) {
            int count=0;
           if(dividend==0) return 0;
           int flag=1;
           if(dividend==IT_MI&&divisor==-1) return IT_MAX;//这里如果不这么操作最后返回的是-IT_MI,超出int限制
           if(dividend==IT_MI&&divisor==1) return IT_MI;//这里如果没有,则后面直接abs IT_MI,直接整型溢出了
           if((dividend^divisor)<0) flag=-1;//判断最后的正负
           long  dd=abs(dividend);
           long  dr=abs(divisor);
           for(int n=1;n>=0;n--){
            if(dd>>n>=dr) {//得到最大的2^n
              count+=1<<n;//叠加这个2^n
              dd-=dr<<n;//下一次用去除得到部分余数的数再次循环,最会叠加count
              
            }
           }
          
          return flag==1?count:-count;
    }
};

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-02,如有侵权请联系 cloudcommunity@tencent 删除countintminreturn变量

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1131673.html

相关标签:无
上传时间: 2025-07-18 19:21:31
留言与评论(共有 19 条评论)
本站网友 安贞医院挂号
19分钟前 发表
分享自作者个人站点/博客
本站网友 visvim
14分钟前 发表
转化成另一个数对它得余数了
本站网友 大专学什么专业好
21分钟前 发表
满满干活
本站网友 醒醒吧
0秒前 发表
那么 我们就可以知道它的余数肯定大于这个2^n
本站网友 东四命西四命
15分钟前 发表
int divide(int dividend
本站网友 脱发原因治疗
15分钟前 发表
故可以先把这个余数的一部分加上
本站网友 眼部护肤品
19分钟前 发表
下面直接以后即再次未进位相加 a=ans1;//未进位的数 b=ans2;//对应进完位的位
本站网友 root管理器
28分钟前 发表
然后dd减去这部分余数乘dr
本站网友 诺基亚倒闭
27分钟前 发表
int divide(int dividend
本站网友 治疗湿疹
14分钟前 发表
也就是求完余数的一部分
本站网友 icu病房一天多少钱
1分钟前 发表
下面直接以后即再次未进位相加 a=ans1;//未进位的数 b=ans2;//对应进完位的位
本站网友 肺炎球菌多糖疫苗
3分钟前 发表
如14和5
本站网友 科沃斯智能机器人
19分钟前 发表
这里要想到<< 有乘^n的作用
本站网友 255010
17分钟前 发表
后面直接异或 } return a; } };2.2两数相除:2.2.1题目:leetcode原题链接:. - 力扣(LeetCode) 2.2.2思路汇总: 思路:此题明显是让用位移符
本站网友 桂林电子科技大学主页
22分钟前 发表
-count; } };以上就是刷题时所遇问题
本站网友 青海房产
5分钟前 发表
转化成另一个数对它得余数了
本站网友 卡培他滨
22分钟前 发表
细细解答
本站网友 卦神
22分钟前 发表
故可以先把这个余数的一部分加上