gdufe acm 1206 lowbit
来源:互联网 发布:mastercam车铣复合编程 编辑:程序博客网 时间:2024/05/17 21:44
链接:
http://acm.gdufe.edu.cn/Problem/read/id/1206
Problem Description:
long long ans = 0;
for(int i = 1; i < = n; i ++)
ans += lowbit(i)
lowbit(i)的意思是将i转化成二进制数之后,只保留最低位的1及其后面的0,截断前面的内容,然后再转成10进制数
比如lowbit(7),7的二进制位是111,lowbit(7) = 1
6 = 110(2),lowbit(6) = 2,同理lowbit(4) = 4,lowbit(12) = 4,lowbit(2) = 2,lowbit(8) = 8
每输入一个n,求ans
Input:
多组数据,每组数据一个n(1 <= n <= 5*10^8)
Output:
每组数据输出一行,对应的ans
Sample Input:
1
2
3
Sample Output:
1
3
4
首先, lowbit (i) = i&-i
for(int i = 1; i < 100; i++)
printf(“%d\n”, lowbit(i) );
观察其规律,可以发现:
i为 1,3,5,7,9…时,lowbit(i) == 1,
i为 2,6,10,14,18…时,lowbit(i) == 2,
i为 4,12,20,28,36…时,lowbit(i) == 4,
i为 8,24,40,56,72…时,lowbit(i) == 8…
代码:
#include <stdio.h>#include <math.h>int main(){ int n; while(scanf("%d", &n) == 1){ int p = (int)log2(n); long long ans = 0; for(int i = 0; i <= p; i++){ ans += ((n - (1 << i)) / (1 << (i+1)) + 1) * (1 << i);//懒得描述。。。反正根据规律可以推出来 } printf("%lld\n", ans); } return 0;}//需要注意:<<的优先级比-低
0 0
- gdufe acm 1206 lowbit
- gdufe acm 1057 leftmost digit
- gdufe acm 1086 互质数
- gdufe acm 1121 Fibonacci数
- gdufe acm 1054 变形课
- gdufe acm 1363 校庆嘉宾
- gdufe acm 1361 校庆抽奖
- gdufe acm 1359 校庆素数
- gdufe acm 1107 Apple Collection
- 拓扑排序 gdufe acm 1183
- gdufe acm 1178 拼接数字
- gdufe acm 1014 Scramble Sort
- gdufe acm 1136 查找ACM(加强版)
- gdufe acm 1228 a*b-c
- gdufe acm 1011 Prime Ring Problem
- gdufe acm 1068 Tempter of the Bone
- gdufe acm 1181 百度的面试
- GDUFE ACM-1072修理牛棚(贪心)
- 3.8 平均数
- jquery eval解析JSON中的注意点介绍
- vi编辑器替换命令:n1,n2s/word1/word2/g结尾g的作用
- 使用eclipse开发java程序
- 服务器主动向客户端推送消息-java之comet4j实现
- gdufe acm 1206 lowbit
- DIY个人智能家庭网关—— 路由器篇之申请公网IP
- 黄金分割数
- PowerShell的学习笔记(2)
- 1018. Public Bike Management 解析
- Eclipse + GNU ARM Eclipse 插件 快速安装芯片包.pack
- 久别重逢的可能——Andriod
- JAVA多态
- HTML自学 第二节