2021-05-03:给定一个非负整数num, 如何不用循环语句, 返回>=num,并且离num最近的,2的某次方 。
2021-05-03:给定一个非负整数num, 如何不用循环语句, 返回>=num,并且离num最近的,2的某次方 。
福大大 答案2021-05-03:
32位整数,N=32。
1.非负整数用int表示。时间复杂度是logN。
整数减一后的二进制形式,1右边的数字全部变成1,最后加1就是需要返回的结果。
2.非负整数用float64表示。浮点数隐含用到了log(整数)的结果,所以复杂度是O(1)。这种方法有点偷奸耍滑了,因为题目里是整数,而这里是用float64,并不是整数,但思路奇特,故采纳了。
浮点数=符号位+阶码+尾数。当尾数不为0的时候,尾数变成0,阶码+1,这就是需要返回的浮点数的内存结果;当尾数为0的时候,当前浮点数就是需要返回的结果。
代码用golang编写。代码如下:
package main
import (
"fmt"
"math"
)
func main() {
for i := 1; i <= 129; i++ {
fmt.Println(i, tableSizeFor1(i), tableSizeFor2(float64(i)))
}
}
// 已知n是正数
// 返回大于等于,且最接近n的,2的某次方的值
func tableSizeFor1(n int) int {
n--
n |= n >> 1
n |= n >> 2
n |= n >> 4
n |= n >> 8
n |= n >> 16
return twoSelectOne(n < 0, 1, n+1)
}
func twoSelectOne(condition bool, a int, b int) int {
if condition {
return a
} else {
return b
}
}
func tableSizeFor2(a float64) float64 {
_, exp, frac := fromFloat64(a)
if frac != 0 {
exp++
frac = 0
}
return getFloat64(0, exp, frac)
}
//根据浮点数求符号位,阶码,尾数
func fromFloat64(f float64) (uint64, uint64, uint64) {
u := math.Float64bits(f)
return u >> 63, u >> 52 & 0b00000111_11111111, u & 0b00000000_00001111_11111111_11111111_11111111_11111111_11111111_11111111
}
//根据符号位,阶码,尾数求浮点数
func getFloat64(s uint64, exp uint64, frac uint64) float64 {
s = s << 63
exp = exp & 0b00000111_11111111 << 52
frac = frac & 0b00000000_00001111_11111111_11111111_11111111_11111111_11111111_11111111
return math.Float64frombits(s | exp | frac)
}
执行结果如下:

2021-05-03:给定一个非负整数num, 如何不用循环语句, 返回>=num,并且离num最近的,2的某次方 。的更多相关文章
- 2021.05.03 T3 数字
2021.05.03 T3 数字 问题描述 一个数字被称为好数字当他满足下列条件: 1. 它有**2*n**个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它 ...
- 2021.05.03【NOIP提高B组】模拟 总结
比较水的一场比赛,却不能 AK T1 有 \(n\) 次,每次给 \(A_i,B_i\) 问以 \(i\) 结尾的 \(A,B\) 的匹配中最大和的最小值 问最大和的最小值,却不用二分. 如果暴力排序 ...
- 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
该题还是考杨辉三角计算,只不过最后每一行都放入List集合中,然后返回,直接看代码: public static List<List<Integer>> generate(in ...
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 给定一个数字n,不用for循环实现输出数组 [1,2,3,4,...,n]
一.for循环方式实现输出[1, 2, 3, ..., n] var n = 5; function test(n){ var arr=[]; for( var i = 1; i <= n; i ...
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- 2021.11.03 P6175 无向图的最小环问题
2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...
- 2021.05.14 tarjan
2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...
- 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数
1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...
- 课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
题目 1 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 2 要求: (1) 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...
随机推荐
- 去除Bigdecimal末尾的.00
String total = new BigDecimal("100.00").stripTrailingZeros().toPlainString();
- AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- VsCode里面运行mvn命令显示The JAVA_HOME environment variable is not defined correctly
问题描述 关于这个问题,就是环境配置出了问题!!! 问题解决 在settings.json里面,配置的环境的路径不能出错,我就是在配置的时候,名为Environments的文件夹写成Environme ...
- LightOJ1298 One Theorem, One Year (欧拉函数dp)
题意:给你almost-K-First-P-Prime, 如果一个数x有k个质因子,且这k个质因子包含且仅包含前p个质数满足条件. 让你求Σφ(x): 思路:首先我们这p个因子一定要有,也就是剩下k- ...
- CF1141 Div3 欢乐信心赛
非常轻松的比赛,连我这样的菜鸡也感到充满力量. A 用类似于质因数分解的操作搞一搞即可. B 将环复制一遍. C 可以发现 \(q\) 就是差分数组.那么差分数组之和最大的地方就是原序列的最大值,为 ...
- Python——高级数据类型(七)
1. 列表数据类型的声明与访问 # coding=utf-8 #列表数据类型的声明与访问 my_list =[1,2,3,4,5] # 列表中的元素 print (my_list) # 0 1 2 3 ...
- CSAPP-Attack Lab
目录 Code Injection Attacks Level 1 Level 2 Level_3 Return-Oriented Programming Level_4 Level_5 获取栈顶地址 ...
- 安装原版Windows自动安装已经备份的驱动
安装完Windows10后联网会自动更新驱动,除了自动更新.如果不让新安装的Windows系统自动安装驱动以外,还有自己手动安装驱动的方式.如何在安装系统过程中就让系统自己安装好驱动? 重装系统首先要 ...
- Windows10绿色植物主题Kemikal
给大家分享一个Windows10的主题,Kemikal主题,内置8张绿色植物树木的壁纸.使用这个主题前需要破解系统主题文件. 想要完整的使用这个主题,需要下载安装下方的三个文件: Windows10主 ...
- 淘宝商品信息定向爬虫.py(亲测有效)
import requests import re def getHTMLText(url): try: kv = { 'cookie': '', #要换成自己网页的cookie 'user-agen ...