问题描述:
实现一个函数:能使十进制数转为二进制数
代码实现:
实际上可以利用C语言中的itoa函数 [itoa函数是C/C++的非标准函数,不保证被所有编译器正常使用]
具体用法:char * itoa ( int value, char * str, int base );
value是待转换的十进制数,str用于存储转换后的字符串,base表示转换成多少进制
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=30;
char str[10];
itoa(a,str,2);
printf("%s",str);
return 0;
}
除了用C语言自带函数外,也可以自己写函数,以下是我写的一个使用短除法的函数
void PositiveIntToBinary3(int value,int bits)
{
char binary[bits];
int index=0;
while(value)
{
if(index>=bits)
{
printf("error:over the limit!");
return;
}
value%2 ? binary[index++]='1' : binary[index++]='0';
value/=2;
}
//将剩余位数上的字符都置为‘0’
for(int i=index;i<bits;i++)
binary[i]='0';
//倒序打印出字符数组
for(int i=bits-1;i>=0;i--)
printf("%c",binary[i]);
}
参数bits用于指定输出的二进制的最大长度,若value转化为二进制后长度大于bits,则会显示error:over the limit!
使用该函数:
int main()
{
PositiveIntToBinary3(246,16);
return 0;
}
代码思考:
打完代码后认真看一看这段代码还有什么可以简化的地方。
在上面的代码中,我发现:
//将剩余位数上的字符都置为‘0’
for(int i=index;i<bits;i++)
binary[i]='0';
这个填充剩余字符的部分可以由已有的while循环实现。
改进版如下:
void PositiveIntToBinary4(int value,int bits)
{
char binary[bits];
int index=0;
while(index<bits)
{
value%2 ? binary[index++]='1' : binary[index++]='0';
value/=2;
}
if(value)
{
printf("error: over the limit!");
return;
}
for(int i=bits-1;i>=0;i--)
printf("%c",binary[i]);
}
我并不是什么聪慧的人,但我想写出好的代码。只有不断尝试和练习才能不断进步。如果你有更好的实现方法或者发现那些地方可以写的更加简洁高效的话,请告诉我,大家共同学习。
这是我在简书第一次写文章,希望这篇文章的内容能帮助您。本人水平有限也有请各位见谅。