(笔试题)二进制1的个数相同的距离最小数

题目:

输入:整数A
输出:整数B
条件:A和B的二进制1的个数相同,且A和B之间的距离|A-B|最小。

思路:

题目没有说明整数类型,这里认为是带符号的整数,即区分正负数。

根据题意,A和B的二进制1的个数相同,且要求距离最小,那么A和B的差别就在于相邻的bit位,如1100和1010,0011和0101等。

当A的最后一位(低位)为0,则找到最后(右边)一位1,然后将该1与左边的0交换,即得到B;如1100和1010

当A的最后一位(低位)为1,则找到最后(右边)一位0,然后将该0与右边的1交换,即得到B。如0011和0101

注意:

考虑边界条件:(计算机所有的数都是以补码的形式存在)

  • 二进制数全为0:即0,返回0;
  • 二进制数全为1:即-1,返回-1;
  • 正数除了符号位0,其他均为1,即该类型能表示的最大正整数,将符号位0跟最低位(右边)的1交换,结果为-2;

如:+127的二进制补码表示为0111 1111,按上述规则交换之后,为1111 1110,补码转为原码(负整数:符号位不变,取反+1),即1000 0010,就是-2。

  • 负数除了符号位1,其他均为0,即该类型能表示的最大负整数,同样将符号位1跟最低位(右边)的0交换,结果为1;

如:-128的二进制补码表示为1000 0000,按上述规则交换之后,为0000 0001,补码转为原码(正整数:补码和原码一样),即0000 0001,就是1。

写代码时需注意:

1、二进制补码的移位:左移时,正负数都是低位补0;右移时,正数高位补0,负数高位补1;

2、正负数的二进制补码表示以及相互转换;

代码:

#include <iostream>
#include <math.h>using namespace std;int sameSumOfOne(int a){if(a==0)return 0;int b=0;int pos=0;int bit_num=sizeof(int)*8;if((a&1)==0){while((a&(1<<pos))==0 &&(pos<bit_num))pos++;//cout<<"0_pos="<<pos<<endl;if(pos==bit_num)return a;if(pos==bit_num-1)return 1;b=a-(1<<pos)+(1<<(pos-1));}else{while((a&(1<<pos))&&(pos<bit_num))pos++;//cout<<"1_pos="<<pos<<endl;// all bit is 1if(pos==bit_num)return a;if(pos==bit_num-1)return -2;b=a-(1<<(pos-1))+(1<<pos);}return b;
}int main()
{int maximum=(int)((unsigned int)-1 >> 1U);int minimum=(int)~((unsigned int)-1 >> 1U);int a[]={0,1,2,3,4,5,6,7,8,9,10,maximum,minimum,-1,-2};int n=sizeof(a)/sizeof(a[0]);for(int i=0;i<n;i++)cout<<a[i]<<" "<<sameSumOfOne(a[i])<<endl;cout<<endl;return 0;
}

运行结果:

 

转载于:https://www.cnblogs.com/AndyJee/p/4579086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Swing –日期选择器对话框

房子里有Swing开发人员吗&#xff1f; 对于使用Swing的用户来说&#xff0c;这是一个GUI组件&#xff0c;可能会对您的UI编码工作有所帮助。 我们的JCG合作伙伴之一提供了日期选择器小部件。 一探究竟&#xff1a; Java Swing –日期选择器对话框以选择日期 翻译自: https://…

Casperjs中fill提交表单遇到的问题

1.if you access internet with proxy please add --ignore-ssl-errorstrue --ssl-protocolany 2.casper.then* and casper.wait* 都是异步执行的 他们的调用&#xff0c;都是按堆栈中的顺序来执行&#xff1b;也就是说&#xff0c;其他同步执行的函数&#xff0c;…

Xuggler视频处理简介

注意&#xff1a;这是我们的“ Xuggler开发教程 ”系列的一部分。 随着互联网上视频的爆炸式增长&#xff0c;开发人员经常需要在其应用程序中操纵视频内容。 Xuggler是Java开发人员的免费开放源代码库&#xff0c;可用于实时解压缩&#xff0c;处理和压缩录制的视频或实时视频…

软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别

转&#xff1a;软件测试中条件覆盖&#xff0c;路径覆盖&#xff0c;语句覆盖&#xff0c;分支覆盖的区别 举个例子吧 if A and B then Action1 if C or D then Action2 语句覆盖最弱&#xff0c;只需要让程序中的语句都执行一遍即可 …

Spring_讲解

http://s&#xff0c;i&#xff0c;s&#xff0c;h&#xff0c;u&#xff0c;o&#xff0c;k.com/forum/blogPost/list/6174.html转载于:https://www.cnblogs.com/gisblogs/p/4579162.html

使用Spring AspectJ和Maven进行面向方面的编程

Spring框架附带AOP支持。 实际上&#xff0c;如Spring参考文档中所述 &#xff0c; “ Spring的关键组件之一是AOP框架。 尽管Spring IoC容器不依赖于AOP&#xff0c;这意味着您不需要使用AOP&#xff0c;但AOP是对Spring IoC的补充&#xff0c;以提供功能强大的中间件解决方案…

hadoop5--mapreduce设计模式

运行结果附图 本节课程主要内容为学习MapReduc设计模式&#xff0c;并编写java程序对日志文件进行处理。 课本上介绍的MapReduce的设计模式主要包含:计数(Counting),分类(Classification),过滤处理(Filtering),排序(Sorting),去重计数(Distinct Counting),相关计数(Cross-Corre…

ES5中新增的Array方法详细说明

http://www.zhangxinxu.com/wordpress/2013/04/es5%E6%96%B0%E5%A2%9E%E6%95%B0%E7%BB%84%E6%96%B9%E6%B3%95/转载于:https://www.cnblogs.com/lmw425317/p/5339539.html

jqGrid,REST,AJAX和Spring MVC集成

两年多以前&#xff0c;我写了一篇关于两个如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代方法。…

Java-马士兵设计模式学习笔记-代理模式--动态代理 修改成可以代理任意接口

一、概述 1.目标&#xff1a;把Proxy修改成可以代理任意接口及其任意方法 2.思路&#xff1a; (1)代理任意接口&#xff1a;把接口类型作为参数传给Proxy的newProxyInstance(Class interfze) (2)代理任意方法&#xff1a;用interfze.getMethods()取出所有方法&#xff0c;拼接实…

PTA习题

PTA习题 PTA浙大版《C语言程序设计&#xff08;第3版&#xff09;》 题目集5-6 水仙花数是指一个N位正整数&#xff08;N≥3&#xff09;&#xff0c;它的每个位上的数字的N次幂之和等于它本身。 本题要求编写两个函数&#xff0c;一个判断给定整数是否水仙花数&#xff0c;…

acdream 1409 Musical 状压DP

链接&#xff1a;http://acdream.info/problem?pid1409 题意&#xff1a;整个国家有n座城市&#xff0c;每座城市有三种粉丝。 第一种一周看一场音乐剧&#xff0c;挑选的音乐剧是已经在周围城市播放上演过的次数最多的音乐剧中的随机一个。 另外一种每天看一场音乐剧&#xf…

真正的模块化Web应用程序:为什么没有开发标准?

OSGI &#xff0c; SpringSource &#xff0c; Jboss模块 &#xff0c;J2EE和清单永远不会结束。所有这些技术都向他们的最终用户/开发人员保证了相同的东西&#xff0c;或多或少是Java模块化Web应用程序&#xff08;&#xff1f;&#xff09;。 但是&#xff0c;我们当中有多少…

C语言5-7习题

本题要求实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

JDBC批处理executeBatch

JDBC运行SQL声明&#xff0c;有两个处理接口&#xff0c;一PreparedStatement,Statement,一般程序JDBC有多少仍然比较PreparedStatement 只要运行批处理&#xff0c;PreparedStatement少一点Statement ps conn.prepareStatement(sql); for(int i 0;i<10;i){ ps.setString(…

BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义  任意边小于其余三边之和 换句话说就是  最长边小于其余三边之和 这样的话问题转化为 最长边依次减其余三边的结果是否小于等于0 还有一点是题目出现0边 即最…

习题6-1 分类统计字符个数 (15 分)

本题要求实现一个函数&#xff0c;统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义&#xff1a; void StringCount( char s[] );其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter 英文字母个数, blank 空格或回车…

Servlet 3.0异步处理可将服务器吞吐量提高十倍

Servlet是Java中处理服务器端逻辑的主要组件&#xff0c;新的3.0规范引入了一些非常有趣的功能&#xff0c;其中异步处理是最重要的功能之一。 可以利用异步处理来开发高度可伸缩的Web应用程序。 使用此功能可以有效地构建Web 2.0站点和AJAX应用程序。 我们的JCG合作伙伴之一To…

使用secureCRT连接VMware-Ubuntukylin虚拟机

使用SecureCRT连接VMware时总是提醒主机拒绝连接。这时可以使用sudo apt-get install openssh-server openssh-client&#xff0c;在主机上安装ssh. 安装成功后&#xff0c;可以连接到主机了。 如果显示远程主机拒绝连接。则可以使用如下方法。 VMware里面装的是Ubuntukylin版本…

加载音频Audio

var cameraAudio new Audio(); cameraAudio.src camera.wav;// 设置音频对象的属性,预加载视频 var options_audio { preload : auto } for(var key in options_audio){ if(options_audio.hasOwnProperty(key) && (key in cameraAudio)){ cameraAudio[key] opti…