有几十万条记录,分文件夹存放,以万为单位,1到10000存入一个文件夹,10001到20000一个文件夹...以此类推,,,,文件夹下面又分(1---5000),(5001---10000)
(1---5000),又分(1---2500),(2501-50000)现在就求高手指点一下,这个算法应该怎么写,
比如:一个文件是165,我怎么知道它应该放在那个文件夹下面呢?
                           文件夹(1---10000)
                          |                |
                     (1---5000)        (5001---10000)_____
                          |                              |
               (1---2500)   (2501---5001)  (5001---7500)  (7501---10000)

解决方案 »

  1.   

    混乱的问题阿
    这样一直二分下去?最小分到多少呢?
    当不能被2整除时怎么办 ?如果只是分到2500的话
    那int i=165 //需要查找的文件号
    int d=i%2500;
    int D3=i-d+1;int D4=i-d+2500;//D3-D4就是最后一层目录 1-2500;如果不考虑效率的话
    d=i%5000;
    D3=i-d+1;D4=i-d+5000;//D3-D4是第二层目录  1-5000d=i%10000;
    D3=i-d+1;D4=i-d+10000;//D3-D4是第二层目录  1-10000
      

  2.   

    public static String getFilePath(int a){
            int s[] = {40000,20000,10000,5000,2500,1250,625};
            String path="";
            String path2="";
            int endFlag = 0;
            
            for(int i=s.length - 1; i>0; i--){
               if(endFlag == 0)
               {
               int n = s[i-1] / s[i]; //同级子目录数
               for(int j=1; j <= n; j++){
                  if(a <= s[i] * j){
                     path2 = "" + s[i] * j;
                  
                     endFlag = 1;
                     break;
                  }
               }
               }
               
               if(!path2.equals("") && Integer.valueOf(path2).intValue() != (s[i-1]))
                   path = s[i - 1] + "\\" + path;
            }
            return path + path2;
         }
      

  3.   

    就是分层找到自己的位置嘛:第一层 10000 个文件一份,第二层 5000 个文件一份……
    10000,5000,2500,1250,625那么:
    第一层:1650/10000 < 1 ,所以在第0 个如果文件夹
    第二层:1650/5000 <1 ,所在在第0个
    第三层:1650/2500 <1 ……
    第四层:1650/1250 <2 所在第 1 个
    第五层:1650/625 <3 ,那么在第二个由此:
    应该在 0_10000\0_5000\0_2500\1251_2500\1251_1875\1650.file
      

  4.   

    int[] 划分规则 = new int[]{10000,5000,2500,1250,625};
    建立一个方法:
    private String 获得路径(int 文件编号,int[] 划分规则)
    {
        StringBuffer path = new StringBuffer();
        for(int i=0; null!=划分规则 && i<划分规则.length; i++)
        {
           int p = (int)(文件编号/划分规则[i]);
           path.append(划分规则[i]*p+1);
           path.append("_");
           path.append(划分规则[i]*(p+1));
           path.append("\\");
        }
        path.append(文件编号+".file");
        return path.toString();
    }纠正:1_10000\1_5000\1_2500\1251_2500\1251_1875\1650.file