程序设计:将由'0'、'1'字符组成的数字字符串视为二进制数,函数change将其转换为n(n=4,8,16)进制形式的字符串。
源程序:
#include <stdio.h>
#include <string.h>
void change(char bin[],int p,char other[])
{
int len,sec,i,j,k,v;
len=strlen(bin);
sec=(p==4 ? 2:(p==8 ? 3:4));//进制 三位归一, 四位归一
j=(len%sec ? len%sec : sec);//如果位数正好对应则计算,不对应则多做一次
for(k=i=0;bin[i];)
{
v=0;
while(j--)
v=v*2+bin[i++]-48;//字符转换
other[k++]=(v>9 ? v+55 : v+48);//进制转换
j=sec;//位数重置
}
other[k]=0;
}
int main()
{
char bin[20]={"111100010101011"},other[10];
int p;
for(p=2;p<=8;)
{
change(bin,p*=2,other);
printf("%s->%2d=%+9s\n",bin,p,other);
}
return 0;
}
Dev-C++运行结果: