每日一题 No.22 a/b(位操作符)【正负数】
来源:互联网 发布:淘宝广告 编辑:程序博客网 时间:2024/06/05 15:33
本题要求:
昨天写了2个数相乘,今天让我们来用位操作符写2个正负数相除吧,给定2个数a,b,计算a/b,并输出商和余数
输入格式:
a b
输出格式:
a/b的商 a/b的余数
输入样例:
155 -152
输出样例:
-1 3
解题思路 :
具体的原理看昨天的题,今天主要是将负数的除法写出来~
跟乘法的除法差不多,都是由add来获得负数,再根据被除数和除数的符号来判断商和余数的符号。
代码 :
#include <iostream>using namespace std; int add(int a, int b) { if (b == 0) { return a; } int s = a ^ b; int c = (a & b) << 1; return add(s, c);}int del(int a, int b) { return add(a, add(~b, 1));}int getBitSize(int a) { int i = 0; int c = a; while (c) { c >>= 1; i++; } return i;}bool getLeftBit(int a, int size, int n) { int i = 0; int c = a; i = size - n; while (i-- > 0) { a >>= 1; } return a & 1;}bool isFuShu(int a) { a >>= (sizeof(int) * 8 - 1); return (a & 1);}pair<int, int> divide(int a, int b) { bool za = false; bool zb = false; if (isFuShu(a)) { za = true; a = add(~a, 1); } if (isFuShu(b)) { zb = true; b = add(~b, 1); } int now = 0; pair<int, int> p(0, 0); int i = 1; int size = getBitSize(a); while (i <= size) { p.second <<= 1; p.second |= getLeftBit(a, size, i); p.first <<= 1; if (p.second >= b) { p.second = del(p.second, b); p.first |= 1; } i++; } if (za != zb) { p.first = add(~p.first, 1); } if (za) { p.second = add(~p.second, 1); } return p;} int main() { int a, b; cin >> a >> b; pair<int, int> h; h = divide(a, b); cout << h.first << " " << h.second << endl; return 0; }
0 0
- 每日一题 No.22 a/b(位操作符)【正负数】
- 每日一题 No.20 a*b(位操作符)【正负数】
- 每日一题 No.17 a+b(位操作符)
- 每日一题 No.18 a-b(位操作符)
- 每日一题 No.19 a*b(位操作符)【仅限正数】
- 每日一题 No.21 a/b(位操作符)【正整数】
- 超级大数A+B(万位正负全能)
- 每日一题 No.16 位操作符的学习与应用
- 【C语言 每日一题】SOJ 1000 A-B
- 位操作 A + B Problem
- 每日一题(4)—— (a ^ b << 2)
- 每日一算法 A^B Problem
- 每日一题A
- 每日一题A
- 每日一题A
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- RSA加密解密及证书
- Java虚拟机详解----常用JVM配置参数
- 数据库课程札记
- Android开源库无法下载的解决方案
- 跨域的四种解决方案
- 每日一题 No.22 a/b(位操作符)【正负数】
- java中的super关键字和this关键字
- Android6.0权限适配
- java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk
- <Qt>重载信号的信号槽处理
- eclipse安装完成python插件,却不能加载成功
- concurrent
- Object类中的方法
- 视频智能分析发展历程和前后端比较