关闭

sdibt 2548 将十进制数转换成二进制数

504人阅读 评论(0) 收藏 举报
键盘输入一个十进制正整数,求出其二进制值, 本题不允许使用数组,也不允许使用递归
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int t=n,i;
		int cas1=0,cas2=0;
		while(t)//计算最大的2的几次方  
		{
			t/=2;
			cas1++;
		}
		cas1-=1;
		n-=pow(2,cas1);//剩余的数是多大 
		printf("1");//先把开头的1打出来 
		if(n==0)//当数刚好是2的次方直接打出剩下的0 
		{
			for (i=1;i<=cas1;i++)
			  printf("0");
			printf("\n");  
			continue;
		}
		while(n)
		{
			cas2=0;
			t=n;
			while(t)//计算接下来的数最大2的次方是多少 
			{
				t/=2;
				cas2++;
			}
			for (i=cas1;i>cas2;i--)
			   printf("0");//1和1之间有几个0 
		    cas1=cas2-1;
			printf("1");
			n-=pow(2,cas2-1);  
		}
		for (i=1;i<cas2;i++)
		  printf("0");
		printf("\n");
	}
	return 0;
}
 
 
 
/*试数法
**比如说100,最大是2^6输出1,其次2^5,这里也是输出一,再后来 
**就是2^2而对于2^4,3这里都要输出0,因为2^6+2^5=96+2^4>n(100) 
**
*/ 

#include<stdio.h>
int main()
{
	int n,m=1,sum,i;
	scanf("%d",&n);
	for(i=0;m<n/2+1;i++)
		m=m*2;
	sum=m;
	printf("1");
	for(;i>0;i--)
	{
		m=m/2;
		sum=sum+m;
		if(sum<=n)	
			printf("1");
		else
		{
			printf("0");
			sum=sum-m;
		}
	}
	printf("\n");
	return 0;
}
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42317次
    • 积分:958
    • 等级:
    • 排名:千里之外
    • 原创:56篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论