import java.lang.Character; import java.util.Scanner; public class Test1{ private static int a; private static int b; public static void main(String[] args){
实际就是26进制输出。 public static String create(int num) { StringBuilder abc = new StringBuilder(); do { if (abc.length() != 0) { num--; //如果不是个位则输出code减1,因为十位从AA开始,实际上是十进制里的00 } abc.insert(0, (char) (65 + num % 26)); num /= 26; } while (num != 0); return abc.toString(); } public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.print(create(i)+" "); if(0 == (i+1)%10) System.out.println(); } } 输出为: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV
int counts = 100;
int sums = x.length;
int test = 0;
for(int i=1;i<counts;i++){
test = i/sums;
if(test<1){
System.out.println("====>"+x[i].toString());
}else if(test>1&&test<3){
for(int t=0;t<sums;t++){
for(int j=0;j<sums;j++){
System.out.println("====>"+x[t]+x[j]);
}
}
}else if(test>2&&test<4){
for(int t=0;t<sums;t++){
for(int j=0;j<sums;j++){
for(int z=0;z<sums;z++){
System.out.println("====>"+x[t]+x[j]+x[z]);
}
}
}
}
}
随便写的,测了下能得到结果,没细想,能用凑合用吧。
public void printNum(String start,int count){
int index=0;//记录输出顺序
int begin=start.charAt(0)-'A';
//------------------------------------------------------------------------
// 处理单个字符的代码.比如输入 C 10,那么只需输出 C D E F G H I J K L
// 如输入C 26,那么需要输出 C D E ... Z. 余下的输出2位,下面代码处理。
// ----------------------------------------------------------------------
int other=0;//记录要输出的单个字符数。
if(count<26-begin){//准确计算要输出的单个字符。
other=count;
}else{
other=26-begin;
}
for(int i=0;i<other;i++){
System.out.println("第 "+(index++)+"次输出: "+(char)(begin+'A'+i)+"\t");
}
//------------------------------------------------------------------------
// 处理连续的AA-AZ 或AAA-AAZ 等。
// S26: 用于记录有多少满26个字符串。如果S26==0,本段代码不执行
//------------------------------------------------------------------------
int s26=0;
if(count-other>26){
s26=(count-other)/26;
}
for(int i=0;i<s26;i++){
//计算出每个26个字符串的首个。如第一个是AA,第二个AAA 等。
String firstString="A";
if(i!=0){
for(int k=0;k<i;k++){
firstString+='A';
}
}//end if.
//根据首个字符串输出整个的26个。
for(int j=0;j<26;j++){
System.out.println("第 "+(index++)+"次输出: "+firstString+(char)(j+'A')+"\t");
}
}
//------------------------------------------------------------------------
// 处理结尾处的不足26个的部分。remain 用于记录有多少个余下的字符串。
//------------------------------------------------------------------------
int remain=0;
if(count+begin>26){//如果count+begin<=26, 则在第一部分处理了。
remain=count-other-s26*26;
}
String firstString1="A";
if(s26!=0){
for(int k=0;k<s26;k++){
firstString1+='A';
}
}
for(int i=0;i<remain;i++){
System.out.println("第 "+(index++)+"次输出: "+firstString1+(char)(i+'A')+"\t");
}
}
程序不对吧,逻辑没满足,输入B后,应该从B答应到Z,然后才是AA,AB,AC,到AZ...不过你先定义出字符范围,思路不错
打到AZ后,应该接着打BA,BB,BC,,,,一直到ZZ,然后才是到三位打印AAA,,,,,这样下去
public static String toString(int i, int radix) {
char buf[] = new char[11];
int charPos = 10;
i = -i;
while (i <= -radix) {
char a = digits[-(i % radix)];
/*
* 去除有0的答案
*/
if(a == '0')
return null;
buf[charPos--] = a;
i = i / radix;
}
buf[charPos] = digits[-i];
return new String(buf, charPos, (11 - charPos));
} public static void main(String[] args) throws Exception {
TestClass.printNum("c", 30);
} public static void printNum(String start,int count) {
int kaishi = (int)start.charAt(0) - (int)'a'+1;
int i = kaishi;
int val = kaishi;
while(i < kaishi+count){
String result = TestClass.toString(val, 27);
//空值不输出
if(result != null){
System.out.println(result);
i++;
}
val++;
}
}
final static char[] digits = { '0','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y','z' };
}
重要更正,输出两位的时候,从AA,AB,AC...AZ,
然后是 BA,BB,BC...BZ
... ...
ZA,ZB,ZC...ZZ
然后才是进行三位的输出,三位的输出逻辑同两位的
第25行使用了start.charAt(0),限制了初始化。。比如main方法里使用TestClass.printNum("cc", 30);
还是使用了c
即初始化只对单个字母有效
题目不是只要求单个字符么。
char[] arr = start.toCharArray();
for (int num = 0; num < arr.length; num++) {
kaishi += ((int) arr[num] - (int) 'a' + 1) * (int) Math.pow(27, arr.length - 1 - num);
}
import java.util.Scanner;
public class Test1{
private static int a;
private static int b;
public static void main(String[] args){
Scanner s=new Scanner(System.in);
a=s.nextInt();
b=s.nextInt();
for(int i=a;i<b;i++){
//double x=i/Math.pow(26,3);
//double y=(i-x*Math.pow(26,3))/Math.pow(26,2);
//double z=(i-x*Math.pow(26,3)-y*Math.pow(26,2))/26;
double m=i%26;
double z=(i-m)/26;
System.out.println(changeE(z)+changeM(m));
}
}
//将字母转换成1-26对应的数字 public static String changeE(double n)
{
if(n==0)
return "";
char ch=(char)(n+64); return String.valueOf(ch);
}
public static int changeN(char n)
{
return n-65;
} //将数字转换正字母
public static String changeM(double n)
{
char ch=(char)(n+65); return String.valueOf(ch);
}
}
我这里有一个运行的时候在控制台输入a,b:a是从第几个开始,b是循环的次数,
public static String create(int num) {
StringBuilder abc = new StringBuilder();
do {
if (abc.length() != 0) {
num--; //如果不是个位则输出code减1,因为十位从AA开始,实际上是十进制里的00
}
abc.insert(0, (char) (65 + num % 26));
num /= 26;
} while (num != 0);
return abc.toString();
} public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.print(create(i)+" ");
if(0 == (i+1)%10)
System.out.println();
}
}
输出为:
A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z AA AB AC AD
AE AF AG AH AI AJ AK AL AM AN
AO AP AQ AR AS AT AU AV AW AX
AY AZ BA BB BC BD BE BF BG BH
BI BJ BK BL BM BN BO BP BQ BR
BS BT BU BV BW BX BY BZ CA CB
CC CD CE CF CG CH CI CJ CK CL
CM CN CO CP CQ CR CS CT CU CV
输入可以从 A 到ZZZZ,最大输出"ZZZZ".public class OutString2{
public static void main(String[] args){
if(args.length!=2){
System.out.println("请在命令行输入参数!");
System.exit(0);
}
String start=args[0];
int count=Integer.parseInt(args[1]);
if(start.length()>4||count>(26*26*26*26-1)){
System.out.println("输入数据超范围!");
System.exit(0);
}
OutString2 os=new OutString2();
os.printNum(start,count);
}
public void printNum(String start,int count){
int index=0;//记录输出顺序
int begin=getNumberFromString(start);
for(int i=begin;i<count;i++){
System.out.println("第 "+(index++)+"次输出: "+getString(i));
}
}
// 把整数转换成字符串
// 最大整数 26*26*26*26-1=456975. 也即输出字符串最大是"ZZZZ".
//
public String getString(int x){
if(x>26*26*26*26-1||x<0){
return "整数超范围!";
}
int temp1=0;
int temp2=0;
int temp3=0;
String s="";
if(x>=(26*26*26+26*26+26)){ //输出AAAA-ZZZZ 数对应
temp1 = x-(26+26*26+26*26*26); //26*26*26+26*26+25----26*26*26*26+26*26*26+26*26+26
s=s+(char)('A'+temp1/(26*26*26));//对应 "ABCD" 的 "A"
temp2=temp1%(26*26*26);
s=s+(char)('A'+temp2/(26*26)); //对应 "ABCD" 的 "B"
temp3=temp2%(26*26);
s=s+(char)('A'+temp3/26); //对应 "ABCD" 的 "C"
s=s+(char)('A'+temp3%26); //对应 "ABCD" 的 "D"
return s;
}
else if(x>=26*26+26){ //输出AAA-ZZZ 数对应为 26*26+25 ----- 26*26*26+26*26+26
temp1=x-(26*26+26);
s=s+(char)('A'+temp1/(26*26)); //对应 "ABC" 的 "A".
temp2=temp1%(26*26);
s=s+(char)('A'+temp2/26); //对应 "ABC" 的 "B"
s=s+(char)('A'+temp2%26); //对应 "ABC" 的 "C"
return s;
}
else if(x>=26){ //输出 AA-ZZ 数对应为 26+25 ---- 26+26*26
temp1=x-26;
s=s+(char)('A'+temp1/26); //对应 "AB" 的 "A".
s=s+(char)('A'+temp1%26); //对应 "AB" 的 "B".
return s;
}
else{
s=s+(char)('A'+x); //输出对应 A-Z 数对应为 A-Z.
return s;
}
}
//把字符串转换成数字。A-->0,Z-->25;AA-->26,ZZ-->25*26+25.....
//
public int getNumberFromString(String s){
int result=0;
int temp=0;
int length=s.length();
for(int i=0;i<length;i++){
temp=s.charAt(i)-'A'+1;
result=26*result+temp;
}
return result-1;
}
}