C语言中实现10进制转换为任意进制的过程为:
定义数组int rs[32],保存转换后的数据,整数的转换结果最多32位(4字节*8位)
定义一个数组char map[]={'0','1','2','3',...,'9','A','B',...'F'},完成相应数值对应的转换后的字符
输入10进制数(整数)num
转入转换进制基数(2-16)ind
循环对num进行模ind运算,得到余数存储到数组rs中
num缩小ind倍
当num为0时结束循环
反向输出数组rs中对应的各元素对应的map字符,得到转换结果
参考代码:
#include
int main()
{
char map[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int i,c[32],num,ind;
do {printf("input num: ");scanf("%d", &num );}while(num<0 );
do {printf("input ind: ");scanf("%d", &ind );} while( ind>16||ind<2);
i=0;
do {
c[i++]=num%ind;
num/=ind;
} while(num!=0) ;
for(i--;i>=0;i--)
printf("%c",map[c[i]] );
printf("\n");
return 0;
}
运行结果:
input num: 100
input ind: 2
1100100
input num: 100
input ind: 8
144
input num: 100
input ind: 16
64
说明:如18的二进制代码为:10010(用除2法算得). 18/2=9 余 0 9/2=4 余 1 4/2=2 余 0 2/2=1 余 0 1/2=0 余 1 (当除得的结果为0时,只需将所有的余数从上往上连在一起,就组成了18的二进制代码:10010) 如果要转换为8进制数,即用3个二进制位就可以表示一个8进制数,为了方便计算,我们在某些位上进行截止计算,如18我们就截取表示成10,010(“,”前的用逐位乘2法算得,当遇上“,”时乘10再用乘2法算得。),所以18的8进制表示为(1*2+0)*10+(0*2+1)*2+0=22(0)。对于16进制只要4个二进制就能表示一位16进制数,如18的截取表示为1,0010,16进制表示为 1*10+((0*2+0)*2+1)*2+0=12(h)。 #include "stdio.h" void main(){ int num,rlt,temp; int j,i,k; int ch1[30]; scanf("输入一个十进制数:%d",num);//输入一个十进制数num i=num; for(j=0;i>0;j++){//输出二进制数组 ch1[j]=i%2; i=i/2; } for(i=0,2*i