/**
*题目:输入数字n,按顺序打印从1最大的n位十进制数,比如输入3,则打印出1、2、3一直到最大的3位数即999.
*时间:2015年8月29日09:32:48
*文件:MaxOfNDigits_1.java
*作者:cutter_point
*/
package bishi.Offer50.y2015.m08.d29;
import org.junit.*;
public class MaxOfNDigits_1
{
/**
* 打印出来这些数
* @param n
*/
public void print1ToMaxOfNDigits(int n)
{
if(n <= 0)
return;
//从1到n位数,也就是创建一个长为n的数组
char number[] = new char[n];
for(int i = 0; i < n; ++i)
{
//初始化为0
number[i] = '0';
}//for
int i = 0;
//只要没有溢出,我们不断输出
while(!increment(number))
{
++i;
System.out.print(String.valueOf(number) + "\t");
if(i % 10 == 0)
System.out.println();
}
}
//这个题涉及到大数
private boolean increment(char number[])
{
boolean overflow = false; //判断是否溢出
int nTake10 = 0; //进位
int num = 0;
for(int i = number.length - 1; i >= 0; --i)
{
num = number[i] - '0' + nTake10;
if(i == number.length - 1)
++num;
if(num >= 10)
{
//进位
if(i == 0)
{
overflow = true;
}//if溢出
else
{
nTake10 = num / 10;
num = num % 10;
number[i] = (char) (num + '0');
}//else
}//if
else
{
//没有进位,那么结束
number[i] = (char) (num + '0');
break;
}//else
}//for
return overflow;
}
@Test
public void Test()
{
MaxOfNDigits_1 mond1 = new MaxOfNDigits_1();
mond1.print1ToMaxOfNDigits(10);
}
public static void main(String[] args)
{
}
}
【笔试】30、打印1到最大的n位数
最新推荐文章于 2021-02-24 11:06:30 发布