HDUOJ_1196(二进制-十进制)

4 篇文章 0 订阅
3 篇文章 0 订阅

HDUOJ_1196(二进制-十进制)


Lowest Bit

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9713    Accepted Submission(s): 7134

Problem Description
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.
  Input
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.
  Output
For each A in the input, output a line containing only its lowest bit.
  Sample Input
  
  
26 88 0
  Sample Output
  
  
2 8
 
题意:把十进制数转换为二进制数时,记录第一个1出现的位置,输出这个1和前面的0组成的二进制数相对应的十进制数。
My  solution:
/*2015.8.26* /
#include<stdio.h>
int mi(int j)/*快速幂*/
{
	int ans=1,v=2;
	while(j>0)
	{
		if(j%2)
		ans*=v;
		v*=v;
		j/=2;
	}
	return ans;
}
int  main()
{
	int i,j,n,q;
	while(scanf("%d",&n)==1&&n)
	{
		q=0,i=0;
		while(n>0)
		{
			q++;
			if(n%2)/* 这里求1最先出现的位置(从左往右)*/
			{
				i=q;
				break;
			}
			n/=2;
		}
		j=i-1;/*j求的是1后面的0的个数*/ 
		printf("%d\n",mi(j));/*求2的j次方*/ 
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值