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);
            }
        }
    }
  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/6225272.html
Copyright © 2011-2022 走看看