特殊的加法和除法(考察点为位操作符)
特殊的加法和除法(考察点为位操作符)
一·简介:本篇为两道例题带你用位操作符完成取代加号和除号运算符,满满干活,细细解答,通俗易懂,浑然通透版本。二·例题讲解:2.1不用加号的加法:2.1.1题目:leetcode 题目链接: . - 力扣(LeetCode)2.1.2思路汇总: 思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数
特殊的加法和除法(考察点为位操作符)
本篇为两道例题带你用位操作符完成取代加号和除号运算符,满满干活,细细解答,通俗易懂,浑然通透版本。
leetcode 题目链接: . - 力扣(LeetCode)
思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数下面,后面直接再次异或即相当于进位了,然后这里就要里用循环+ 重新赋值了,当再次进位可能会出现还要进位的情况,因此这选择了循环,直到不需要进位即结束,也就是这里对应得到进位的变量是0就可。 如14和5:1110,0101
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;
}
};
leetcode原题链接:. - 力扣(LeetCode)
思路:此题明显是让用位移符,这里要想到<< 有乘^n的作用,而>>有除2^n的作用,因此可以利用这点完成,这里的除法就是把dd转化成2^n(最大)乘一个大于或等于dr的数,那么 我们就可以知道它的余数肯定大于这个2^n,故可以先把这个余数的一部分加上,然后dd减去这部分余数乘dr,也就是求完余数的一部分,转化成另一个数对它得余数了,最后叠加就好 依次重复操作,最后得出即可,这里我们是倒序的因为要得到最大的这个2^n然后可以保证后面重复操作时候这个n一定小于上一次n。 细节问题:最大最小值处理以及正负号 一个式子解释如:17 /2: 2^4/2+1/2==8
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组装电脑配置单推荐报价格
上传时间: 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分钟前 发表 |
故可以先把这个余数的一部分加上 |