位数(digits)的处理
2024-08-22 23:09:28
主要针对:二进制表示法,以及十进制表示法;
1. 获取位数
已知该数 n 采用十进制进行表示
- 二进制形式的位数:⌊log2n⌋+1
- 十进制形式的位数:⌊log10n⌋+1
2. 截断(保留前/后 m 位)
- 二进制:保留前 m 位 ⇒ 需要右移 n-m 位;
- 十进制:保留前 m 位 ⇒ 需要右移 n-m 位;
- 但这里的右移 n-m 位,涵义并不相同,二进制右移,对应着二进制位运算(除以 2n−m),十进制右移,对应的是十进制的位运算(除以 10n−m);
// 保留整数 n 的前 m 位;
int part(int n, int m){
return n / int(pow(10, int(log10(n))+1-m));
}
part(123456789, 3) ⇒ 123
3. 一些应用
Karatsuba 快速乘积算法首先将两个整数分别一分为二。例如,a 和 b 各位 256 位的整数,那么使用 a1 和 b1 保存前 128 为,而 a0 和 b0 中保存后 128 位。分割后,a 和 b 可写成如下的形式。
{a=a0⋅10128+a1b=b0⋅10128+b1
最新文章
- ExtPB.Net:窗体应用技巧(2)在树形导航下打开弹出的win窗口
- ae 地理坐标与投影坐标转换 [转]
- java-7311练习(上)
- setTimeout和setinterval的区别
- JMeter压力测试以文件的形式
- Android记录6--ViewPage+Fragment的使用例子
- hadoop错误java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
- 基于Redis的分布式锁的简单实现
- CSS Grid 网格布局全解析
- 查询优化--小表驱动大表(In,Exists区别)
- redis scan删除key的方法封装
- React基础概念
- android开发(43) 动画演示,会跑的小人,从屏幕左侧跑到右侧
- 常用的js 总结
- 团队开发中,eclipse中安装jre
- ROS知识(9)----安装Turtlebot2和远程控制Turtlebot2
- linux进程管理(二)
- SQLserver2008全文检索使用方法
- 使用ITextSharper小结
- Specification模式的一个不错的示例代码