hdu 1098 Lowest Bit 解题报告

题目链接:http://code.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=2&problemid=22

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

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

     用了递归的方法来做。

 1 #include <iostream>
 2 #include <math.h>      // pow库函数的使用
 3 using namespace std;
 4 
 5 int cnt;
 6  
 7 void cal(int n)
 8 {
 9     int flag = 0;
10     if (n == 0)
11         return;    // 递归的出口,已计算完n的二进制表示
12     else
13     {
14         if (n % 2)     // 从右往左数,第一次遇到1
15         {
16             printf("%.0lf\n", pow(2, cnt));   // 计算2^cnt
17             flag = 1;
18         
19         }
20         else
21             cnt++;    // 累计不为1的位置有多少个
22         if (flag)
23             return;      // 一旦从右边发现1,递归结束,也是递归的出口
24         cal(n/2);                        
25     }        
26 }
27 
28 int main()
29 {
30     int a;
31     while (scanf("%d", &a) != EOF && a)
32     {
33         cnt = 0;
34         cal(a);
35     }
36     return 0;
37 }

    

原文地址:https://www.cnblogs.com/windysai/p/3334052.html