JZ17 打印从1到最大的n位数
public int [ ] printNumbers ( int n) {
char [ ] number = new char [ n] ;
int num= ( int ) Math . pow ( 10 , n) ;
int [ ] result = new int [ num- 1 ] ;
int p= 0 ;
for ( int i= 0 ; i< n; i++ )
number[ i] = '0' ;
while ( ! incrementNumber ( number) ) {
PrintNumber2 ( number, result, p) ;
p++ ;
}
return result;
}
public static boolean incrementNumber ( char [ ] number) {
boolean isOverflow = false ;
int nTakeOver = 0 ;
int nLength = number. length;
for ( int i = nLength - 1 ; i >= 0 ; -- i) {
int nSum = number[ i] - '0' + nTakeOver;
if ( i == nLength - 1 ) {
++ nSum;
}
if ( nSum >= 10 ) {
if ( i == 0 ) {
isOverflow = true ;
} else {
nSum -= 10 ;
nTakeOver = 1 ;
number[ i] = ( char ) ( '0' + nSum) ;
}
} else {
number[ i] = ( char ) ( nSum + '0' ) ;
break ;
}
}
return isOverflow;
}
public static void PrintNumber ( char [ ] number) {
boolean isBeginning0= true ;
for ( int i= 0 ; i< number. length; i++ ) {
if ( isBeginning0&& number[ i] != '0' )
isBeginning0= false ;
if ( isBeginning0== false )
System . out. print ( number[ i] ) ;
}
System . out. println ( ) ;
}
public static void PrintNumber2 ( char [ ] number, int [ ] result, int p) {
boolean isBeginning0= true ;
for ( int i= 0 ; i< number. length; i++ ) {
if ( isBeginning0&& number[ i] != '0' )
isBeginning0= false ;
if ( isBeginning0== false ) {
String s = new String ( number, i, number. length- i) ;
Integer n = Integer . parseInt ( s) ;
result[ p] = n;
break ;
}
}
}