剑指offer:(12)代码的完整性: 打印从1到最大的n位数

来源:互联网 发布:mac系统怎么登陆steam 编辑:程序博客网 时间:2024/06/07 05:05

题目:输入数字n,按顺序打印出从1到最大 的n位十进制数。比如输入3,则打印1,2,3一直到最大三位数即999.

重点:

   1、当输入n很大时,最大的n位数是不是用整型(int)或者长整型(long long)都会溢出,大数问题    用数组存储

    2、什么时候达到最大的n位数(n个9),只要对999....9加1,才会第一个数组位置(下标为0)的基础上产生进位

package cn.com.jianzhioffer;/* * 用int[] 来存大数据的每一位 */public class Solution121 {public  static void print1toNDigit(int n){if(n<0) return;int[] numberArray = new int[n];while(!increment(numberArray)){printNumber(numberArray);}}/* * 增加数据+1 */public  static boolean increment(int[] numberArray){boolean  isOverFlow =  false;  //是否上溢int nTakeOver = 0; //进位int nLength = numberArray.length;for(int i = nLength-1;i>=0;i--){int nSum = numberArray[i]+nTakeOver;if(i == nLength-1)nSum++;if(nSum>=10){if(i==0){isOverFlow = true;}else{nSum -= 10;nTakeOver = 1;numberArray[i] += nSum;}}else{numberArray[i] = nSum;break;  //一次增加数据+1,成功输出结果}}return isOverFlow;}public static void printNumber(int[] numberArray){boolean isBeginning0 = true;//是否以0开始int nLength = numberArray.length;for(int i = 0;i<nLength;i++){if(isBeginning0 && numberArray[i]!=0){//前面位置都是0,但是出现了非0首位isBeginning0 = false;}if(!isBeginning0){//非零首位System.out.print(numberArray[i]);}}}public static void main(String[] args) {print1toNDigit(2);}}

         

 

0 0
原创粉丝点击