专栏首页xiaoxi666的专栏【模板小程序】任意长度非负十进制数转化为二进制(java实现)

【模板小程序】任意长度非负十进制数转化为二进制(java实现)

妈妈再也不用担心十进制数过大了233(注意只支持非负数)

import com.google.common.base.Strings;

import java.math.BigInteger;
import java.util.Scanner;

/**
 * 任意长度十进制数转化为二进制
 */
public class AnyNumberConverterFromDecimalToBinary {

    /**
     *
     * @param srcNum 待转换的十进制数
     * @return 二进制字符串
     */
    private static String convertFromDecimalToBinary(String srcNum){
        BigInteger src = new BigInteger(srcNum);
        StringBuilder sb = new StringBuilder();
        BigInteger zero = new BigInteger("0");
        BigInteger two = new BigInteger("2");
        if (zero.equals(src)) {
            return "0";
        }
        while (!zero.equals(src)) {
            sb.append(src.remainder(two));
            src = src.divide(two);
        }
        return sb.reverse().toString();
    }

    /**
     * 格式检查
     * @param srcNum
     * @return 若可以转化为整数, 返回true; 否则返回false
     */
    private static boolean FormatCheck(String srcNum){
        if (Strings.isNullOrEmpty(srcNum)){
            return false;
        }
        if (!isDigit(srcNum)) {
            return false;
        }
        return true;
    }

    /**
     * 判断一个字符串中每个字符是否都为数字
     * @param strNum
     * @return 若每个字符都是数字, 返回true; 否则返回 false
     */
    private static boolean isDigit(String strNum) {
        return strNum.matches("[0-9]{1,}");
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String srcNum = sc.nextLine();
        if (!FormatCheck(srcNum)) {
            System.out.println("格式错误");
            return ;
        }
        System.out.println(convertFromDecimalToBinary(srcNum));
    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你真的理解Java中的try/catch/finally吗?

    上面这几个例子,大多数人已经非常了解。同时也衍生出一些理论,比如不要在finally中return等,不再赘述。

    xiaoxi666
  • 【模板小程序】字符串截取

    xiaoxi666
  • C++ 中的 delete[] 机制剖析

    本文简单总结了delete[]放在析构函数中VS放在主函数中的区别(针对自己定义类)。

    xiaoxi666
  • AR短信应用《Skrite》新增传送功能,一条短信即可环游世界

    VRPinea
  • 【追光者系列】HikariCP源码分析之evict、时钟回拨、连接创建生命周期

    evict定义在com.zaxxer.hikari.pool.PoolEntry中,evict的汉语意思是驱逐、逐出,用来标记连接池中的连接不可用。

    用户1655470
  • linux压缩解压命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——...

    yaohong
  • 区块链开发之验证ETH地址的有效性

    首先引入web3j的依赖 https://mvnrepository.com/artifact/org.web3j

    24-丰总
  • Linux下解压命令、压缩命令大全,详细教程

    15、.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .r...

    业余草
  • linux下压缩与解压命令大全

    .tar      解包:tar xvf FileName.tar     打包:tar cvf FileName.tar DirName (注:tar是打包,...

    Sindsun
  • BBS论坛(十八)

    zhang_derek

扫码关注云+社区

领取腾讯云代金券