#include<stdio.h>
void itob(int n,char s[], int b)
{
int i=1;
for(;i<=32;i++) //共循环了32次,保证得到32位的二进制数
{
s[i-1]= n % b; //数组是从编号0开始的,一直到编号31结束
n = n/b ; //用模除的方法依次得到每位进制数
}
for(i=32;i>0;i--)
{
printf("%d",s[i-1]);
}
}
int main()
{
char ret[32];
char s[32];
int n=0;
scanf("%d",&n);
itob(n,s, 2); //此时进制b=2
return 0;
}
经过深层次的学习,我将此题又做进一步的修改与完善,解决了任意进制输出的效果,并且每次输出不需要32位全部输出,而是具体情况需要几位二进制就输出几位数。代码如下:
#include<stdio.h>
void reverse(int len,char arr[]) //逆置输出正确的进制位
{
int left =0;
int right =len -1;
while(left < right)
{
char temp = arr[left]; //a[0]与最后一个互换
arr[left] = arr[right];
arr[right] = temp;
right --;
left ++;
}
}
void itob(int num,char s[], int b)
{
int i=0;
while(num)
{
if(b<10)
{
s[i]=num% b+'0'; //得到int型
num /= b ; //用模除的方法依次得到每位进制数
i++;
}
else if(b==16)
{
s[i]="0123456789abcdef"[num%16];
num/=16;
i++;
}
else
{
break;
}
}
s[i]='\0';
reverse(i , s);
}
int main()
{
char s[32];
int b=0;
scanf("%d",&b);
itob(255,s, b); //此时进制b可以任意输入
printf("%s\n",s);
return 0;
}
转载于:https://blog.51cto.com/10740184/1706404