//函数声明
int Decimal_to_Binary(int);
//函数定义
int Decimal_to_Binary(int decimal){
int i=0;
long binary=0;
short *binary_bit = new short[64];
for(i;decimal>0;i++){
binary_bit[i]=decimal%2;
decimal/=2;
}
i--; //难点,把上方的空循环减掉!
for(i;i>=0;i--){
int substitute = 1;
for(int n=i;n>=0;n--){
if(n!=0){
substitute=substitute*10;
}
else{
substitute=substitute*1;
}
}
binary+=binary_bit[i]*substitute;
}
return binary;
}
新手上路,测试了十几分钟才搞出来,除了难点那里一开始忽略了,后来很多时间都浪费在它上面了,其它问题都不是很大,哈哈哈哈哈!!!
注:这个设计是有范围的,调用时参数大了会出错,自己用的比较大时候改一下变量类型就行了。仅供参考!!
上面时四年前写的,现在2022年了,还是更新一下^_^
char* Decimal_to_Binary2(int); //函数声明
char* Decimal_to_Binary2(long long decimal){ //函数的返回后需要delete释放内存
char* binchar=new char[65]; //二进制串存储器 支持到最高64位,第65个字符放最大长度时的串结束符
if(binchar==NULL){
exit(-1); //内存不足或其它原因申请内存失败
}
int count=0; //计数器
while(decimal!=0){ //转换逻辑
if(count==64)break;
if(decimal&1==1){
binchar[count]='1';
}else{
binchar[count]='0';
}
count++;
decimal>>=1;
}
for(;count<64;count++){ //空位用0填充
binchar[count]='0';
}
binchar[count]='\0'; //串结束符
for(int i=0;i<count;i++,count--){ //串反转
char tmch=binchar[i];
binchar[i]=binchar[count-1];
binchar[count-1]=tmch;
}
return binchar; //数组返回
}
int main(){ //主函数测试
std::cout<<"Start..."<<std::endl;
long long inNumber; //支持64位的长整数,范围:-9223372036854775808~9223372036854775807
std::cout<<"Input A Int Number Next Line"<<std::endl;
std::cin>>inNumber;
char* resBCA=Decimal_to_Binary2(inNumber);
std::cout<<std::endl;
std::cout<<"BinaryCharArray --> "<<resBCA<<std::endl;
delete[] resBCA;resBCA=NULL; //动态数组内存释放
std::cout<<"...End"<<std::endl;
system("pause");
}
四年前转换出的实际上是十进制整数,当时是为了保障转换后还是一个数,现在看来这种保障是毫无意义滴~,使用字符数组表示并存储二进制串更加简单完整无疑,尽管这样表示一个长整型占用的空间是原数本身所占空间的八倍。