100分求助36进制的循环问题,高手请进呀

fwqerhg 2009-04-01 04:22:57
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



要实现上述功能,希望各位大侠多帮帮忙呀~~~~~
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwqerhg 2009-04-02
  • 打赏
  • 举报
回复
我到,我都给分了,为什么显示不出来????????????
fwqerhg 2009-04-02
  • 打赏
  • 举报
回复
谢谢楼上两位的解答 马上加分
heting1024 2009-04-01
  • 打赏
  • 举报
回复
呃我的还得改

最后面

if(i<size)
{
getPage(tempStr,size,k);
}
hbgzg3006 2009-04-01
  • 打赏
  • 举报
回复
晕。看错了进位后要求末位是0!!!
heting1024 2009-04-01
  • 打赏
  • 举报
回复
2楼 的好像不符合啊
heting1024 2009-04-01
  • 打赏
  • 举报
回复
有点错误改了下
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);
}
}
}

hbgzg3006 2009-04-01
  • 打赏
  • 举报
回复
用到了封装类 我的效率应改没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);
}
}
heting1024 2009-04-01
  • 打赏
  • 举报
回复
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);
}
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧