面试题 12:打印 1 到最大的 n 位数
题目:输入数字 n,按顺序打印出从 1 到最大的 n 位进制数。比如输入 3,则打印出 1、 2、 3 一直到 999.
思路
这道题比较基础。我的做法是设置一个临时变量,不断比较它和n的大小,同时对一个初始值为1的数做‘*= 10’的操作,直到临时变量等于n。这样就能得到n位数的最大值+1,也就是所有为都为9。之后for循环打印比最大值+1小的数就可以了。
代码
package swordOffer;
/**
* 面试题 12:打印 1 到最大的 n 位数题目:输入数字 n,按顺序打印出从 1 到
* 最大的 n位进制数。比如输入3,则打印出 1、 2、 3 一直到 999.
*
* @author Stephen Huge
*
*/
public class Ex12PrintNDigits {
public static void main(String[] args) throws Exception {
Ex12PrintNDigits pnd = new Ex12PrintNDigits();
pnd.printNDigits(8);
}
public void printNDigits(int n) throws Exception{
if(n < 0 || n > 9) { //int型的数最大值是2147483647,是10位,不能超过这个数,所以n最大可以取到9
throw new Exception("n的值不合法");
}
int num = 1;
int count = 0;
while(count < n) {
num *= 10;
count++;
}
for(int i = 1; i < num; i++) {
System.out.print(i + "\t");
if(i % 10 == 0) { // 每10个数换行
System.out.println();
}
}
}
}