博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯2016省赛 - A5消除尾一
阅读量:4176 次
发布时间:2019-05-26

本文共 763 字,大约阅读时间需要 2 分钟。

下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0

如果最后一位是0,则原数字保持不变。

如果采用代码中的测试数据,应该输出:

00000000000000000000000001100111   00000000000000000000000001100000
00000000000000000000000000001100   00000000000000000000000000001100

请仔细阅读程序,填写划线部分缺少的代码。

#include 
void f(int x){ int i; for(i = 0; i < 32; i++) { printf("%d", (x>>(31-i))&1); } printf(" "); /* x = _______________________; */ //待填语句 x = x & (x+1); for(i = 0; i < 32; i++) { printf("%d", (x>>(31-i))&1); } printf("\n"); }int main(){ f(103); f(12); return 0;}

一、

该题有两个思路:

1、异或去一;

2、加一去一;

显然第二种最简单实现的;

比如103

00000000000000000000000001100111->

00000000000000000000000001101000

后面111意味着全部得变为0;

怎么办?采取&符号即可解决。

所以所填代码为:

x=x&(x+1);

二、

输出一个数x的二进制(32位):

for (int i = 0; i < 32; ++i){    cout << x >> (32-i) & 1;}cout << endl;

 

转载地址:http://ivtai.baihongyu.com/

你可能感兴趣的文章
算法-计算无向图中两个节点之间所有的路径
查看>>
转载:SDE ST_Geometry SQL st_intersects查询很慢的解决方法
查看>>
Spring框架的基本概念
查看>>
Spring框架的IoC容器详解
查看>>
JSF的ManagedBean与Spring Bean的比较与集成
查看>>
Spring Bean的延迟初始化
查看>>
Spring Bean的域scope
查看>>
不同作用域(scope)的Spring Bean之间的依赖关系的动态代理注入
查看>>
Spring框架的两个简化XML配置文件的p-namespace和c-namespace
查看>>
Spring Bean的生命周期管理方法
查看>>
Spring框架中的各种*Aware接口
查看>>
再见,RichFaces
查看>>
Spring Bean在XML配置中的父子继承
查看>>
Spring Bean的配置方式及标注(Annotation)配置
查看>>
Spring框架的Portlet MVC
查看>>
详解Spring应用作为EJB客户端调用EJB方法
查看>>
Spring框架中的Cache抽象层
查看>>
Spring框架事务管理之一:JavaEE事务与Spring事务
查看>>
java.lang.IllegalArgumentException: FacesContext must not be null 错误分析及解决
查看>>
Spring框架事务管理之四:Spring编程式事务
查看>>