发布网友 发布时间:2022-04-22 09:16
共2个回答
热心网友 时间:2023-05-23 17:30
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 <stdio.h>运行结果:
input num: 100
input ind: 2
1100100
input num: 100
input ind: 8
144
input num: 100
input ind: 16
热心网友 时间:2023-05-23 17:30
说明:如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<j,i++){//倒置得出正确的二进制代码 temp=ch1[i]; ch1[i]=ch1[j-i]; ch1[j-i]=temp; } do{ scanf("输入要输出的进制:%d",i);//输入要转换的进制数i }while(i!=2||i!=8||i!=16); if (i==8) k=3;//计算要所选进制所允许截取的最大位数k if (i==16) k=4; temp=0; rlt=0; for(i=0,i<j,i++){ if(i<j%k||(i-j%k)%k>0){ temp=temp*2+ch1[i];break; } if(i==j%k||(i-j%k)%k==0){//进行分位点的计算 temp=temp*2+ch1[i];rlt=rlt*10+temp;temp=0;break; } } if (k==3) i=8; else if(k==4) i=16; else i=2; printf("%d的%d进制代码为:%d",num,i,rlt); }