题目:输入数字n,按顺序打印出从1到最大的n位十进制,eg,输入3,输出1,2,3^999
思考:当输入的n很大的时候,求最大的n位数是不是用整型或者长整型都会溢出?即我们需要考虑大数问题
方法一:在字符串上模拟数字加法,首先把字符串中的每一个数字都初始化为'0',然后每一次为字符串表示的数加1,再打印出来
方法二:全排列思想,如果在数字前面补0,会发现n位所有十进制数其实就是n个从0到9的全排列,我们把数字的每一位从0到9排列一遍,就得到了所有的十进制数,只是在打印的时候,数字排在前面的0不打印出来。用递归,数字的每一位可能是0到9中的一个数,然后设置下一位,递归结束的条件是我们已经设置了数字的最后一位
import java.util.Arrays;
public class wr12OneToN {
public static void printToMax(int n){
if(n<=0){
return ;
}
// 将字符串中的每个数字初始化为'0'
char []number=new char[n];
for(int i=0;i=0;i--){
int temp=num[i]-'0'+carry;
if(i==size-1){
temp++;
}
if(temp>=10){
if(i==0){
isOverflow=true;
}
else{
temp=temp-10;
carry=1;
num[i]=(char)('0'+temp);
}
}else{
num[i]=(char)('0'+temp);
break;
}
}
return isOverflow;
}
// 只有在碰到第一个非0的字符后才开始打印,直到字符串的结尾
public static void printNumber(char[] num){
int size=num.length;
int i=0;
while(i