主题:进制转换
			 yaoyinglong
				 [专家分:0]  发布于 2010-05-27 22:28:00
 yaoyinglong
				 [专家分:0]  发布于 2010-05-27 22:28:00							
			请高手指点一下,我想编写一个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个回复)
		
								
				沙发
				
					 雪光风剑 [专家分:27190]  发布于 2010-05-27 22:45:00
雪光风剑 [专家分:27190]  发布于 2010-05-27 22:45:00				
				t首先没赋初值就用了
其次,进了循环以后t一直是固定值
正确做法是scanf以后先t=a
然后循环里直接用t来求余自己折半
							 
						
				板凳
				
					 yaoyinglong [专家分:0]  发布于 2010-05-27 22:58:00
yaoyinglong [专家分:0]  发布于 2010-05-27 22:58:00				
				
不好意思!还是不合适啊!你能不能做个示范啊?呵呵……
							 
						
				3 楼
				
					 雪光风剑 [专家分:27190]  发布于 2010-05-27 23:15:00
雪光风剑 [专家分:27190]  发布于 2010-05-27 23:15:00				
				#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 楼
				
					 yaoyinglong [专家分:0]  发布于 2010-05-27 23:32:00
yaoyinglong [专家分:0]  发布于 2010-05-27 23:32:00				
				
哈哈……太好啦!这下合适了。你太牛了!谢谢啊!!!
							 
						
				5 楼
				
					 yaoyinglong [专家分:0]  发布于 2010-05-27 23:43:00
yaoyinglong [专家分:0]  发布于 2010-05-27 23:43:00				
				
但是我还是看不懂搞您的程序?就是后边的循环,能解释下吗?
while (t>0)
    {
        n1=t%2;
           printf("%d",n1);
       t=t/2;
       }
唉!很不好意思啊!请见谅!!
							 
						
				6 楼
				
					 雪光风剑 [专家分:27190]  发布于 2010-05-28 05:52:00
雪光风剑 [专家分:27190]  发布于 2010-05-28 05:52:00				
				[quote]
但是我还是看不懂搞您的程序?就是后边的循环,能解释下吗?
while (t>0)
    {
        n1=t%2;
           printf("%d",n1);
       t=t/2;
       }
唉!很不好意思啊!请见谅!![/quote]
循环条件是对的,这点没争议吧
取模那一步也不用解释了吧,就是计算2进制的当前位
t/=2这一句相当于你用短除的时候,取余完了之后当然要求商计算后一位了
但是这个代码有个问题,就是求出来的值是倒着的:)至于怎么样转过来,请自己思考
							 
						
				7 楼
				
					 yaoyinglong [专家分:0]  发布于 2010-05-28 22:50:00
yaoyinglong [专家分:0]  发布于 2010-05-28 22:50:00				
				
哦!谢谢!看明白啦!呵呵……昨晚脑子进水了!哈哈……居然没看明白t/2!至于那个是倒着的要用到栈!我也不会,还没学呢!下学期学了数据结构就知道了!呵呵……非常感谢你![em12]
							 
						
				8 楼
				
					 雪光风剑 [专家分:27190]  发布于 2010-05-29 00:04:00
雪光风剑 [专家分:27190]  发布于 2010-05-29 00:04:00				
				用不着栈,存个字符串,逆过来,或者记录下数组的最大下标,倒着输出回来
							 
						
				9 楼
				
					 yaoyinglong [专家分:0]  发布于 2010-05-29 00:57:00
yaoyinglong [专家分:0]  发布于 2010-05-29 00:57:00				
				还没睡?要注意身体啊!呵呵……下面是我将您给我的程序加工了下的,可是不合适了!请您在帮帮忙……要不把您的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 楼
				
					 yaoyinglong [专家分:0]  发布于 2010-05-29 01:07:00
yaoyinglong [专家分:0]  发布于 2010-05-29 01:07:00				
				
不好意思!错啦!是这个程序:
#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--;
        }  
}
请您看看!
							 
									
			
我来回复