转换进制的问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 20:12:24
int n, i=0,a[33];
scanf("%d",&n);
while(n){
a[i++]=n%2;
n/=2;}
while(--i>=0)
printf("%d",a)}
不明白 while(--i>=0) 是让输出时按照倒序的方式输出吗。为什么这么表达。假如,不需要倒过来输出,那该怎样编写输出 那些没有倒过来的数

int n, i=0,a[33];
scanf("%d",&n);
while(n<33){
a[i++]=n%2;
n/=2;}
while(i<33) {
i++;
printf("%d",a[i])}

这是把10进制转换成二进制。每次对2求余再除以2,先计算出来的是低位,后算出来的是高位,输出的时候当然要倒着输出啦!!!

while(--i>=0) 是让输出时按照倒序的方式输出
这样表达是因为十进制转换为二进制的方法是:首先不断地对前次得到的商除以并列出余数,然后把所得的余数按从后向前的次序排列
不倒过来输出是:
int n, i=0,a[33];
scanf("%d",&n);
while(n){
a[i++]=n%2;
n/=2;}
int k=0 ;
while(k++<i)
printf("%d",a[k-1]);

因为在转换进制时,首先求出来的是低位所以要倒过来输出
你的意思是怎么想办法先输出高位但又不用到while语句的--i吧
目前我只想到了一种方法用的函数递归
#include <stdio.h>
void f(int a)
{
int i;
if(a==0)
return;
else
{
i=a%2;
f(a/2);
printf("%d",i);
}
}
void main()
{ int i=100;
f(i);
getchar();
}
应该你学过递归的吧

你的程序有错吧~~
最后一行应该是printf("%d",a[i])吧?

你的程序是要将a[33]反