HDU 1.2.6 (ACM steps)

<table cellspacing="0" cellpadding="0" width="100%" align="center"><tbody><tr><td class="problem_content"><div class="panel_title" align="left">Problem Description</div><div class="panel_content">Given an positive integer A (1 <= A <= 100), output the lowest bit of A.

For example, given A = 26, we can write A in binary form as 11010, so the lowest bit of A is 10, so the output should be 2.

Another example goes like this: given A = 88, we can write A in binary form as 1011000, so the lowest bit of A is 1000, so the output should be 8.
</div><div class="panel_bottom"> </div></td></tr><tr><td class="problem_content"><div class="panel_title" align="left">Input</div><div class="panel_content">Each line of input contains only an integer A (1 <= A <= 100). A line containing "0" indicates the end of input, and this line is not a part of the input data.
</div><div class="panel_bottom"> </div></td></tr><tr><td class="problem_content"><div class="panel_title" align="left">Output</div><div class="panel_content">For each A in the input, output a line containing only its lowest bit.
</div><div class="panel_bottom"> </div></td></tr><tr><td class="problem_content"><div class="panel_title" align="left">Sample Input</div><div class="panel_content"><pre>26
88
0
 
Sample Output
2
8
 
Author
SHI, Xiaohan
 
Source
Zhejiang University Local Contest 2005
 


// 解法(1) 
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <math.h>
//int main(void)
//{
//	int num, sum;
//	char binary[10] = {0};
//	int i, j;
//	while(scanf("%d", &num)!=EOF && num != 0)
//	{
//		sum = 0;
//		itoa(num, binary, 2);
//		for(i = strlen(binary) - 1, j = 0; i >= 0; i--, j++)
//		{
//			sum += (binary[i] - '0') * pow(2, j);// 数字*数权(8421) 
//			if(binary[i] == '1')	break;
//		}
//		printf("%d\n", sum);
//	}
//	
//	return 0;
//}

// 解法(2) 
#include <stdio.h>
#include <math.h>
int main(void)
{
	int num, sum;
	while(scanf("%d", &num)!=EOF && num != 0)
	{
		int t = 0;
		while(num % 2 == 0)// 判断每次的余数,只要是0,就满足 
		{
			t ++;
			num /= 2;
		}
		printf("%d\n", (int)pow(2, t));
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值