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

LeetCode刷题 -- 29. 两数相除

题目

在这里插入图片描述

C 代码

#define U32_MIN (0x80000000)
#define U32_MAX (0x7FFFFFFF)

int can_shift(int val, int offset) {
	int i = 0;
	int old_val = 0;
	
	if (val == 0) return 0;
	if (val > (1 << 30)) return 0;
	
	for (i = 0; i < offset; i++) {
		old_val = val;
		if (val > ((1 << 30) - 1)) return 0; //1. 注意限制左移的越界大小问题,因为0x40000000左移1位也会越界,所以需要解决它;
		val = (val << 1);
		val &= 0x7FFFFFFF;
		if (val == 0) return 0;
		if (val < old_val) return 0;
	}
	return 1;
}

int divide(int dividend, int divisor) {
    int i = 0;
	int ret = 0;
	int sign = 0;
	int one = 0;
	int maps[32] = {0};
	
	if (dividend == divisor) return 1;
	if (divisor == 1) return dividend;
	
	if (divisor == -1) {
		if (dividend == U32_MIN) {
			return U32_MAX;
		} 
		return -dividend;
	}
	
	if (dividend < 0) {
		if (dividend == U32_MIN) {
			dividend = U32_MAX;
			one = 1;
		} else {
			dividend = -dividend;
			one = 0;
		}
		sign ^= 1;
	}
	
	if (divisor < 0) {
		if ( divisor == U32_MIN) {
			return 0;
		}
		divisor = -divisor;
		sign ^= 1;
	}
	
	if (divisor > dividend) return 0;

	for (i = 30; i >= 0; i--) { // 2. 注意点:全都不可以移位,但是满足直接减的情况漏掉了,也就是maps[0]的部分;所以把maps[0]部分单纯抽出来处理
		if(can_shift(divisor, i) == 0 && i != 0) {
			maps[i] = 0;
			continue;
		}
		while ( 1 ) {
			if ( dividend >= ((divisor << i) - one) ) {
				dividend -= (divisor << i);
				maps[i] += 1;
			} else {
				break;
			}
		}
	}
	
	ret = maps[0];
	for (i = 1; i < 32; i++) { 
		ret += (maps[i] << i);
	}

	return (sign == 0) ? ret : -ret;
}

相关文章:

  • 8、HTTP/1.0和HTTP/1.1的区别【高频】
  • 测试金蝶云的OpenAPI
  • Python面试(八股)
  • 如何管理路由器
  • 做表格用什么软件?VeryReport让数据管理更高效!
  • 如果使用MODBUS通用类进行通信
  • 【无标题】Ubuntu22.04编译视觉十四讲slambook2 ch4时fmt库的报错
  • 【Nodejs】用pm2管理nodejs服务
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • 3 算法1-3 回文质数
  • 使用esp32接入大模型(http请求)
  • AI关于SHAP分析与列线图(算法)解释线性模型矛盾之处的解释
  • 网络流算法: Edmonds-Karp算法
  • PostgreSQL的基本使用
  • PCEP介绍
  • C++ ++++++++++
  • 上海市计算机学会竞赛平台2024年4月月赛丙组排序分数
  • HTML元素,标签到底指的哪块部分?单双标签何时使用?
  • MySQL Connector/J下载
  • 【学习笔记】三维点云空洞修复介绍(二)Grids-based
  • 网站投入费用/企业网站优化方案
  • 5g网站建设公司/竞价系统
  • 哪里做网站需求/想做网络推广的公司
  • 免费域名网站的/优化推广方案
  • 快递公司网站制作/软考培训机构哪家好一点
  • c 2015 做网站/重庆网站建设软件