回 帖 发 新 帖 刷新版面

主题:进制转换

请高手指点一下,我想编写一个10进制转换2进制的程序,但是我编写的怎么老不合适,而且还是个死循环,请高手们指点指点。下面是我编写的:
#include<stdio.h>

main()
{
    int a , n1 , temp , t;

    printf("请输入一个数字:\n");
    scanf("%d",&a);
    while (t!=0)
    {
        n1=a%2;
           printf("%d",n1);
       t=(a-1)/2;
       }
}
[em8]感激不尽!!!

回复列表 (共12个回复)

沙发

t首先没赋初值就用了
其次,进了循环以后t一直是固定值
正确做法是scanf以后先t=a
然后循环里直接用t来求余自己折半

板凳


不好意思!还是不合适啊!你能不能做个示范啊?呵呵……

3 楼

#include<stdio.h>

main()
{
    int a , n1 , temp , t;

    printf("请输入一个数字:\n");
    scanf("%d",&a);
    t=a;
    while (t>0)
    {
        n1=t%2;
           printf("%d",n1);
       t/=2;
       }
}
试试看

4 楼


哈哈……太好啦!这下合适了。你太牛了!谢谢啊!!!

5 楼


但是我还是看不懂搞您的程序?就是后边的循环,能解释下吗?
while (t>0)
    {
        n1=t%2;
           printf("%d",n1);
       t=t/2;
       }
唉!很不好意思啊!请见谅!!

6 楼

[quote]
但是我还是看不懂搞您的程序?就是后边的循环,能解释下吗?
while (t>0)
    {
        n1=t%2;
           printf("%d",n1);
       t=t/2;
       }
唉!很不好意思啊!请见谅!![/quote]
循环条件是对的,这点没争议吧
取模那一步也不用解释了吧,就是计算2进制的当前位
t/=2这一句相当于你用短除的时候,取余完了之后当然要求商计算后一位了
但是这个代码有个问题,就是求出来的值是倒着的:)至于怎么样转过来,请自己思考

7 楼


哦!谢谢!看明白啦!呵呵……昨晚脑子进水了!哈哈……居然没看明白t/2!至于那个是倒着的要用到栈!我也不会,还没学呢!下学期学了数据结构就知道了!呵呵……非常感谢你![em12]

8 楼

用不着栈,存个字符串,逆过来,或者记录下数组的最大下标,倒着输出回来

9 楼

还没睡?要注意身体啊!呵呵……下面是我将您给我的程序加工了下的,可是不合适了!请您在帮帮忙……要不把您的QQ说下我加你?这样方便写!谢谢!!!
#include<stdio.h>

main()
{
    int a , n1 , temp , t , i;
    int s[32];

    printf("请输入一个数字:\n");
    scanf("%d",&a);
    t=a;
    while (t>0)
    {
        n1=t%2;
            s[i]=n1;
        for (i=31;i<=0;i--)
        {
           printf("%d",s[i]);
        }
       t=t/2;
       }
}
再次麻烦您了!是在很不好意思!唉!只能怪我笨啊!

10 楼


不好意思!错啦!是这个程序:
#include<stdio.h>

main()
{
    int a , n1 , temp , t , i=0;
    int s[32];

    printf("请输入一个数字:\n");
    scanf("%d",&a);
    t=a;
    while (t>0)
    {
        n1=t%2;
            s[i++]=n1;
            t=t/2;
    }
        while (i>0)
        {
           printf("%d",s[i]);
           i--;
        }  
}
请您看看!

我来回复

您尚未登录,请登录后再回复。点此登录或注册