剑指offer编程题Java实现——面试题12打印1到最大的n位数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了剑指offer编程题Java实现——面试题12打印1到最大的n位数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1770字,纯文字阅读大概需要3分钟。
内容图文
![剑指offer编程题Java实现——面试题12打印1到最大的n位数](/upload/InfoBanner/zyjiaocheng/1129/56092003dea04b9f8b344080f256e7e5.jpg)
题目:打印1到最大的n位数
输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999.
这道题考察的地方是如何表示大数问题。由于n是任意大的数组,如果n太大的话n位数就超过了long型能够表示的范围,在面试题11求数值的整数次方的时候题目中已经明确的提示了不考虑大数问题,在这道题中,用字符串或者数组表示大数是一种很简单有效的方法。用字符串表示大数也适用于大数加法、大数减法和大数的乘法问题。
下面代码是使用数组方式实现大数的产生和打印,在这道题中要特殊考虑的地方是如果实现整数+1,以及低位+1产生的进位问题的处理,还有要如何判断当前数字是否是最大的n位数。
![技术分享](/upload/getfiles/default/2022/11/7/20221107092412104.jpg)
![技术分享](/upload/getfiles/default/2022/11/7/20221107092412129.jpg)
1 package Solution; 2 3 /** 4 * 剑指offer面试题12:打印1到最大n位数 5 * 题目:输入数字n,按顺序打印从1到最大的n位十进制数。 6 * 比如:输入3,则打印1,2,3一直到999 7 * 解法一:使用数组表示大数 8 * @author GL 9 * 10 */ 11 public class No12PrintOneToMaxNthDigits { 12 13 // 使用数组实现对数进行+1操作 14 public static boolean increment(int[] number){ 15if(number.length<1) 16thrownew RuntimeException("invalid lenth of array"); 17//最高位产生进位标志,则数组中的数为最大的n位整数18boolean isOverFlow=false; 19//进位位20int carry=0; 21//没有产生进位的+1,循环只运行1次,产生一个进位,循环多运行一次22for(int i=number.length-1;i>=0;i--){ 23int sum=number[i]+carry; 24if(i==number.length-1) 25 sum++;//最低位+126if(sum>=10){ 27//最高位产生进位28if(i==0) 29 isOverFlow=true; 30//普通位产生进位31else{ 32 carry=1; 33 number[i]=0; 34 sum=0; 35 } 36 }else{ 37//普通位+1的结果保存到数组中,+1后程序退出循环38 number[i]=sum; 39break; 40 } 41 } 42return isOverFlow; 43 } 44//打印数组中表示的数,如果数组中表示的数字位数小于n,则不打印前面的045publicstaticvoid print(int[] number){ 46boolean isBeginning=true; 47for(int i=0;i<number.length;i++){ 48if(isBeginning&&number[i]!=0) 49 isBeginning=false; 50if(!isBeginning) 51 System.out.print(number[i]); 52 } 53 } 54publicstaticvoid main(String[] args) { 55int[] number=newint[3]; 56while(!increment(number)){ 57 print(number); 58 System.out.println(); 59 } 60 } 61 }
在实现+1的方法中,使用一个全局变量来表示是否是最大的n位数,也就是当数组的最低位array[0]产生进位的时候就已经达到了n位最大数。另外在实现+1操作时候,如果低位产生进位要将进位位加到高位上。
打印数字采用的是每生成一个数字,判断此数字是否是最大的n位数,如果不是则打印,然后数字+1,再判断打印的过程。
原文:http://www.cnblogs.com/gl-developer/p/6506152.html
内容总结
以上是互联网集市为您收集整理的剑指offer编程题Java实现——面试题12打印1到最大的n位数全部内容,希望文章能够帮你解决剑指offer编程题Java实现——面试题12打印1到最大的n位数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。