| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3062 人关注过本帖
标题:输入一个十进制数 输出其二进制数
只看楼主 加入收藏
yasmin
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2016-7-22
结帖率:33.33%
收藏
 问题点数:0 回复次数:8 
输入一个十进制数 输出其二进制数
程序代码:
#include <stdio.h>
#include <math.h>

int main()
{
int a;
scanf("%d",&a);
int i = 0;
int j;

while (1)
{
if (a / pow(2,i) == 1)
{
    break;
}
i++;
}

for (j = i; j >= 0; j++)
{
    if (a / pow(2,j) == 1)

{    
    printf("1");
    a -= pow(2,j);
}
else
{
printf("0");
}
}
return 0;
}



为什么输出不了

[此贴子已经被作者于2016-7-27 23:59编辑过]

搜索更多相关主题的帖子: 二进制 十进制 
2016-07-27 23:46
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
程序代码:
while (1)
{
if (a / pow(2,i) == 1)
{
    break;
}
i++;
}

在输入a一个值之后,首先出现问题是:a/pow(2,i)==1  ,这个条件不成立
因为pow返回的是double类型的,a/pow()==1永远不成立
所以if条件不会执行。会一直循环!

因为这里已经出现了死循环,下面也就没调试了。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-07-28 03:24
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
看了下,while是一个死循环,for也是一个死循环。
算法也不对。
总之一句话,这段代码除了声明变量,其它全错。
#include <stdio.h>
#include <math.h>

int main()
{
int a,k=0;
scanf("%d",&a);
int i = 0;
int j=0;
while(1)
{
    j=j*10;
    k=a%2;
    j+=k;
    a=(a-k)/2;  //a=a/2也行
    if(a==0) break;
}
while(j!=0)
{
    printf("%d",j%10);
    j=j/10;
}
return 0;
}
最简单的套用十进制转换二进制的公式。

[此贴子已经被作者于2016-7-28 06:19编辑过]

2016-07-28 06:10
yasmin
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2016-7-22
收藏
得分:0 
回复 2楼 lanke711
懂了 谢谢大神!
2016-07-28 07:45
yasmin
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2016-7-22
收藏
得分:0 
回复 3楼 linlulu001
谢谢大神 ,但是我把pow()全部转换成 int后,能成功运行,算法应该没错吧。。。
2016-07-28 07:47
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 yasmin
你说pow强制转换输出就没问题,说明你for循环已经改成j--。
所以我并没有说错,你发出来的代码除了声明,都是错的。
2016-07-28 08:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    if( scanf("%u",&n) != 1 )
        return 1;

    if( n == 0 )
    {
        puts( "0" );
    }
    else
    {
        char bin[sizeof(n)*8+1];
        char* p = bin + sizeof(n)*8;
        *p = '\0';
        for( unsigned t=n; t; t>>=1 )
            *--p = '0' + (t&1);
        puts( p );
    }

    return 0;
}

2016-07-28 09:00
yasmin
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2016-7-22
收藏
得分:0 
回复 6楼 linlulu001
哦哦发现了,这里代码打错了,不好意思啊大神 !
2016-07-28 09:04
yasmin
Rank: 1
等 级:新手上路
帖 子:22
专家分:4
注 册:2016-7-22
收藏
得分:0 
回复 7楼 rjsp
谢谢大神!
2016-07-28 12:17
快速回复:输入一个十进制数 输出其二进制数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018875 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved