zoukankan      html  css  js  c++  java
  • 将十进制数转为一个n位数的密码(每位都是个m进制数)

    例如一个6位数的10进制密码,共有106个密码,如果把每个6位数的密码编成号就是[0,106-1]。
    这是十进制的情况,即6个位,每个位有10种选择。如果要遍历所有密码,需要6重for循环,每个循环10次。
    假如是100位的密码,每位15中选择呢,那就需要100重for循环根本,不可能写代码遍历。

    那么对于n个位,每位m种选择呢,如何遍历每个密码?如果也把这样的密码编号成一个十进制数,如何由这个十进制数得到每个位上的数字呢?

    下面的代码可以实现这种转换。

    void convert(int m,int n)
    {
        //1个n位数的密码,每位有m种选择,共m的n次方个密码,以下代码将0-m的n次方减一的十进制数转为一个n位的密码。
        for(int i=0;i<Math.pow(m,n);i++)
        {
            HashMap<Integer,Integer> password=new HashMap<Integer,Integer>();
            int sum=i;
            for(int j=n-1;j>=0;j--)
            {
                int digit=0;
                if(sum<Math.pow(m,j))
                {
                    digit=0;
                }
                else
                {
                    digit=sum/(int)Math.pow(m,j);
                    sum-=digit*Math.pow(m,j);
                }
                password.put(j,digit);
            }
        }
    }
  • 相关阅读:
    xml
    反射
    类加载器
    TCP通信
    UDP通信
    网络通信
    【SpringBoot】Freemarkerの主キー
    【SpringBoot】Warの作成
    【Excel】ファイルの拡張子
    【SAP】TCODE表
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/6225272.html
Copyright © 2011-2022 走看看