#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; }