0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 36进制
要求
1、给定一个长度为8的字符串,eg:12345ABC
2、给定一个数字,eg:50
需要达到如下效果
依次生成50个相应的字符串,12345ABC    //这个在循环前也输出一次接着从最后一位开始变化,12345ABC最后一位是C 它在36进制中是第13位,因此这位能产生23个字符串,12345ABD
12345ABE
12345ABF
12345ABG
12345ABH
12345ABI
12345ABJ
12345ABK
12345ABL
12345ABM
12345ABN
12345ABO
12345ABP
12345ABQ
12345ABR
12345ABS
12345ABT
12345ABU
12345ABV
12345ABW
12345ABX
12345ABY
12345ABZ
因为最后一位只能产生23个字符串,而要求为50,所以需要进位,进位后,倒数第一位变为0,在倒数第二位上开始循环,倒数第二位是B,
它在36进制中是第12位,因此这位能产生24个字符串,
12345AC0
12345AD0
12345AE0
12345AF0
12345AG0
12345AH0
12345AI0
12345AJ0
12345AK0
12345AL0
12345AM0
12345AN0
12345AO0
12345AP0
12345AQ0
12345AR0
12345AS0
12345AT0
12345AU0
12345AV0
12345AW0
12345AX0
12345AY0
12345AZ0
而1+23+24<50,所以需要进位,进位后,倒数第二位变为0,在倒数第三位上开始循环,倒数第三位是C,它在36进制中是第11位,因此这位能产生25个字符串,
1+23+24+25>50,到这位循环就可以结束了,只要输出后面的2个字符串就行了
12345B00
12345C00要实现上述功能,希望各位大侠多帮帮忙呀~~~~~

解决方案 »

  1.   

    package test;public class TestAscII { private static Integer i=0;
    private static  int endInt=0;
    public static void main(String[] args) {
    getPage("12345ABC",50,7);
    }
    private static void getPage(String src,Integer size,int k)
    {
     String  tempStr="";
    i=i+1;
    System.out.println(i+"---------"+src);
    char[] temp=src.toCharArray();

    endInt=src.charAt(k);

    if(endInt<90)
    {
    endInt=endInt+1;
    temp[k]=(char)(endInt);
    System.out.println();

    }else if(endInt>=90)
    {
    endInt=-1;
    temp[k]='0';
    k=k-1;

    }else if(endInt<10)
    {
    endInt=endInt+1;
    temp[k]=(char)(endInt);

    }else if(endInt==10)
    {
    endInt=64;
    }


    for (int i = 0; i < temp.length; i++) {
    tempStr=tempStr+temp[i];
    }

    if(i<size)
    {
    getPage(tempStr,50,k);
    }
    }
    }
      

  2.   

    用到了封装类 我的效率应改没1楼的好
    String s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Map<Character,Integer> map1=new HashMap<Character, Integer>();
    Map<Integer,Character> map2=new HashMap<Integer, Character>();
    char[] c=s.toCharArray();
    for(int i=0;i<36;i++){
    map1.put( c[i],i);
    map2.put(i, c[i]);
    }
    String input="12345ABC";
    int offset=0;
    char ch=input.charAt(input.length()-2); //因为36进制,且打印50个所以最多用到第二个
    for(int i=0;i<50;i++){
    int value=map1.get(input.charAt(input.length()-1))+i-offset;
             if(map1.containsValue(value)){
              System.out.println(input.substring(0,input.length()-1)+map2.get(value));
             }
             else if(value==36){
              input=input.substring(0, input.length()-2)+map2.get(map1.get(ch)+1)+0+"";
              offset=36;
              System.out.println(input);
             }
    }
      

  3.   

    有点错误改了下
    package test;public class TestAscII { private static Integer i=0;
    private static  int endInt=0;
    public static void main(String[] args) {
    //System.out.println((int)'A');
    getPage("12345ABC",50,7);
    }
    private static void getPage(String src,Integer size,int k)
    {
     String  tempStr="";
    i=i+1;
    System.out.println(i+"---------"+src);
    char[] temp=src.toCharArray();

    endInt=src.charAt(k);

    if(endInt<90&&endInt>=64)
    {
    endInt=endInt+1;
    temp[k]=(char)(endInt);
    System.out.println();

    }else if(endInt>=90)
    {
    endInt=-1;
    temp[k]='0';
    temp[k-1]=(char)((int)(temp[k-1])+1);
    k=k-1;

    }else if(endInt<10&&endInt>=-1)
    {
    endInt=endInt+1;
    temp[k]=(char)(endInt);

    }else if(endInt==10)
    {
    endInt=64;
    }


    for (int i = 0; i < temp.length; i++) {
    tempStr=tempStr+temp[i];
    }

    if(i<size)
    {
    getPage(tempStr,50,k);
    }
    }
    }
      

  4.   

    呃我的还得改最后面 if(i<size)
    {
    getPage(tempStr,size,k);
    }