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

免费中文网站模板下载学生个人网站建设模板

免费中文网站模板下载,学生个人网站建设模板,wordpress 4.8.3 漏洞,网站总是在建设中题目1:下一个数 给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。 示例: 输入:num 2(或者0b10) 输出:[4,…

题目1:下一个数

给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

示例:

 输入:num = 2(或者0b10)
 输出:[4, 1] 或者([0b100, 0b1])
 输入:num = 1
 输出:[2, -1]

解题思路:

1.先用bitset将num的32位二进制表示出来,存放到数组中,方便可以遍历

2.较大值:从左往右找到第一个01,将其转换成10,再将右侧剩余的1全都移动到最低位

eg.0101110   ->1000111

3.较小值:从左往右找到第一个10,将其转换成01, 再将右侧剩余的1全都移动到最高位

eg.1001110   ->0111100

4.bitset数组的下标是从低位开始的,也就是从右往左进行遍历

源代码如下:

class Solution {
public:vector<int> findClosedNumbers(int num) {bitset<32> smaller(num);//将二进制表示出来bitset<32> bigger(num);//找较小值int a=-1;//a初始化为-1for(int i=1;i<32;i++){//找到10,变成01if(smaller[i]==1 && smaller[i-1]==0){smaller.flip(i);//flip(i)将第i位上的数字进行翻转 (0转1,1转0)smaller.flip(i-1);//将右侧剩余的1,全移动到高位//相当于left和right的位互换for(int left=0,right=i-2;left<right;){//从低位找到第一个不为0的while(left<right && smaller[left]==0) left++;//从高位找到第一个不为1的while(left<right && smaller[right]==1) right--;//位翻转smaller.flip(left);smaller.flip(right);}//smaller.to_ulong()   将数组smaller转成unsigned long类型的值//再强转成int类型a=(int)smaller.to_ulong();break;}}//找较大值int b=-1;//在找较大值时,bigger要保证正数,最高符号位保证为0,最大正数为2147483647,2进制31个1,i只能到第30位,如果写 i<32 会出现上溢,所以这里与较小值不同的点在于要将i<32改为i<31,防止溢出for(int i=1;i<31;i++){//找到01,变成10if(bigger[i]==0 && bigger[i-1]==1){bigger.flip(i);bigger.flip(i-1);//将右侧剩余的1全移动到低位for(int left=0,right=i-2;left<right;){while(left<right && bigger[left]==1) left++;while(left<right && bigger[right]==0) right--;bigger.flip(left);bigger.flip(right);}b=(int)bigger.to_ulong();break;}}return {b,a};}
};

题目2:整数转换

编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例:

 输入:A = 29 (或者0b11101), B = 15(或者0b01111)
 输出:2
 输入:A = 1,B = 2
 输出:2

 解题思路:

1.用bitset将整数A和B的32位 二进制表示出来存放在数组里,进行遍历

2.遇到aa[i]!=bb[i],说明需要转换,count++即可

源代码如下:

class Solution {
public:int convertInteger(int A, int B) {bitset<32> aa(A);//A的二进制bitset<32> bb(B);//B的二进制int i=0;//都是32位,所以只需要一个下标进行遍历int count=0;//用来记录需要改变的次数while(i<32){//遇到当前位不相等的,就需要转换,count++if(aa[i]!=bb[i]){count++;}i++;}//返回countreturn count;}
};

题目3:配对交换

编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。

示例:

 输入:num = 2(或者0b10)
 输出 1 (或者 0b01)

解题思路:

1.用bitset将num的二进制保存到数组中,便于用下标进行访问

2.从低到高两两进行交换,i+=2

3.将最后的结果用to_ulong()函数先转成unsigned long类型,再强转成int类型

源代码如下:

class Solution {
public:int exchangeBits(int num) {bitset<32> bit(num);int i=0;//从低到高进行两两交换//注意:因为要访问i+1,所以循环结束条件为i<31,防止越界while(i<31){int temp=bit[i];bit[i]=bit[i+1];bit[i+1]=temp;i+=2;//i每次跳两个位数}//bit.to_ulong()  将二进制数转成unsigned long类型的值//再强转成int类型,就可以返回了return (int)bit.to_ulong();}
};
http://www.yayakq.cn/news/247019/

相关文章:

  • 凡科网站能在百度做推广吗企业网站销售
  • 网站建设骗响应式官网模板免费下载
  • 免费的网站开发工具外贸做编织袋常用网站
  • 怎么免费做网站视频教学六安政务中心网站
  • 创新的中山网站建设中铁建设集团最新门户网登录
  • 吉林省建设安全信息网站网站建设验收标准
  • 静态网站开发常用语言设计师招聘网
  • 上海闵行医院网站优化过度的表现
  • asp.net门户网站项目怎么做视频拍摄器材
  • 企业网站的一般要素网站推广指标
  • 网站报价单模板宝塔没有域名直接做网站怎么弄
  • 建站公司杭州网站留言表格怎么做
  • 个人网站建设规划论文怎样免费推广网站
  • 合肥做网站建设公司wordpress制作公司
  • 五核网站建设安米网在线app制作
  • 网站建设招标书技术介绍北京官网优化公司
  • 做欧美贸易的主要有哪些网站站长统计app软件下载官网安卓
  • 可拖拽网站弄个盈利网站做什么
  • 网站建设费需要缴纳印花税吗市场营销试题库(带答案)
  • 一重大连工程建设有限公司官方网站百盛联合建设集团网站
  • 六安有哪些做网站的公司动漫做3d游戏下载网站
  • 如何用vs的c 做网站三亚市住房和城乡建设厅网站
  • 企业如何在自己的网站上做宣传设计公司logo免费
  • 国内高清视频素材网站推荐杭州网页设计公司排行
  • 电子商务网站建设课后习题答案物流公司招聘信息
  • 用腾讯云做淘宝客网站视频怎么做阿里巴巴英文网站
  • 做农业网站wordpress新闻源码
  • 电商网站开发 数商云外贸网站定制开发
  • 阳泉做网站公司上海网站seo排名优化
  • 简述制作网站的流程推广网站文案素材