这个题目看似简单,容易陷入面试官的陷阱。面试官没有给定N的范围,当N很大的时候我们不能用整型或者长整型来表示N。所以这是一个典型的大数问题。这种情况下一般用数组或者字符串存储大数,然后打印出来。
思路1:循环方法
step1:用数组模拟加法(这是因为我们找到最大的数之后无法直接用循环的方法将每个数打印出来,所以我们必须每一次循环加1然后打印数字)
step2:将数组代表的数组打印出来
package paixusuanfa;
public class PrintDigits {
public void print1ToMaxOfNDights1s(int n) {
if(n<=0)
return;
char[] digit = new char[n];
for(int i=0;i<n;i++)
digit[i]='0';
for(int i=n-1;i>=0;i--) {
while(digit[i]!='9') {
int m=0;
digit[m]++;
while(m<n-1 && digit[m]>'9') {
digit[m]='0';
digit[m+1]++;
m++;
}
printdigits(digit);
}
}
}
private void printdigits(char[] digit) {
int m = digit.length-1;
while(digit[m]=='0')
m--;
for(int i=m;i>=0;i--)
System.out.print(digit[i]);
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PrintDigits demo = new PrintDigits();
demo.print1ToMaxOfNDights1s(2);
}
}