十进制转换成二进制数功能函数创建(非字符)

//函数声明

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"); 
}

四年前转换出的实际上是十进制整数,当时是为了保障转换后还是一个数,现在看来这种保障是毫无意义滴~,使用字符数组表示并存储二进制串更加简单完整无疑,尽管这样表示一个长整型占用的空间是原数本身所占空间的八倍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值