您的位置:首页 > 其它

hdu 1098 Lowest Bit 解题报告

2013-09-22 23:18 246 查看
题目链接:http://code.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=2&problemid=22

题目意思:给出一个数,观察其二进制表示,从右往左看,记录遇到第一个出现1的位置pos,做2 ^ pos 的运算。

这几天杭电的告示:Exercise Is Closed Now! 再加上想用一些简单的题目来调剂一下,因此就做ACM Steps 吧。

用了递归的方法来做。

#include <iostream>
#include <math.h>      // pow库函数的使用
using namespace std;

int cnt;

void cal(int n)
{
int flag = 0;
if (n == 0)
return;    // 递归的出口,已计算完n的二进制表示
else
{
if (n % 2)     // 从右往左数,第一次遇到1
{
printf("%.0lf\n", pow(2, cnt));   // 计算2^cnt
flag = 1;

}
else
cnt++;    // 累计不为1的位置有多少个
if (flag)
return;      // 一旦从右边发现1,递归结束,也是递归的出口
cal(n/2);
}
}

int main()
{
int a;
while (scanf("%d", &a) != EOF && a)
{
cnt = 0;
cal(a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: