主题:进制转换
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
t首先没赋初值就用了
其次,进了循环以后t一直是固定值
正确做法是scanf以后先t=a
然后循环里直接用t来求余自己折半
板凳
yaoyinglong [专家分:0] 发布于 2010-05-27 22:58:00
不好意思!还是不合适啊!你能不能做个示范啊?呵呵……
3 楼
雪光风剑 [专家分: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
哈哈……太好啦!这下合适了。你太牛了!谢谢啊!!!
5 楼
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
[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
哦!谢谢!看明白啦!呵呵……昨晚脑子进水了!哈哈……居然没看明白t/2!至于那个是倒着的要用到栈!我也不会,还没学呢!下学期学了数据结构就知道了!呵呵……非常感谢你![em12]
8 楼
雪光风剑 [专家分:27190] 发布于 2010-05-29 00:04:00
用不着栈,存个字符串,逆过来,或者记录下数组的最大下标,倒着输出回来
9 楼
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
不好意思!错啦!是这个程序:
#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--;
}
}
请您看看!
我来回复