【剑指offer】打印1到最大的n位数

本文介绍了一种使用数组表示大整数的方法,以解决打印从1到最大n位十进制数字的问题。通过自定义数加1操作并判断溢出情况,实现了递增打印功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

输入数字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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值