题目:
输入数字n,按照顺序打印从1到最大的n位十进制数字。如:输入3,打印出:1,2,3,4........998,999。
分析:
简单的题目,求出最大的n位数字,循环打印即可。面试过程中越简单的题目越值得推敲,考虑可扩展考察的知识点。
此题没有明确n的值,因此基本的整数类型可能超出表示范围,此时最应考虑出数组及字符串表示数字的方式。
循环打印的过程中,需要在每个数据的基础上进行加1,其次完成打印操作,同时还应该判断何时结束循环,即如何判断最大值。
实现:
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="white-space:pre"> </span>// 数加1操作,通过返回值判断是否到达最大数
public boolean increment(int[] number) {
boolean isOverflow = false;
// 进位
int nTakeOver = 0;
for (int i = number.length - 1; i >= 0; i--) {
int nSum = number[i] + nTakeOver;
// 如果是最低位加1
if (i == number.length - 1)
nSum++;
if (nSum >= 10) {
if (i == 0)
isOverflow = true;
else {
nTakeOver = 1;
number[i] = nSum - 10;
}
} else {
number[i] = nSum;
break;
// 最低位加1后有进位会循环改变前面的位,没有进位跳出循环,前面的位不变
}
}
return isOverflow;
}
// 打印一个数,循环遍历数组,从不为0的位开始打印
public void print(int[] number) {
boolean begin = false;
for (int i = 0; i < number.length; i++) {
if (!begin && number[i] != 0)
begin = true;
if (begin) {
System.out.print(number[i]);
}
}
}
public void oneToN(int n) { // 打印从1到最大的n位整数
if (n <= 0)
System.out.println("输入出错!");
int[] number = new int[n];
while (!increment(number)) {
print(number);
System.out.println();
}
}</span>