剑指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
- 剑指offer:(12)代码的完整性: 打印从1到最大的n位数
- 剑指offer 3.3 代码的完整性2- 打印1到最大的n位数
- 《剑指offer》刷题笔记(代码完整性):打印1到最大的n位数
- 剑指Offer 面试题17:打印从1到最大的n位数 Java代码实现
- 剑指offer-12 打印1到最大的N位数
- 剑指offer 12 -打印1到最大的n位数
- 剑指Offer-12-打印1到最大的n位数
- 剑指Offer 12 打印1到最大的n位数
- 剑指offer-12:打印1到最大的n位数
- 剑指OFFER || 打印从1到最大的N位数 12_Print1ToMaxOfNDigits.cpp
- 剑指Offer之打印1到最大的N位数
- 剑指offer:打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- [剑指Offer]打印1到最大的n位数
- 【剑指offer】打印1到最大的n位数
- 剑指Offer之打印1到最大的n位数
- 剑指Offer之 - 打印1到最大的n位数
- 剑指offer:打印1到最大的n位数
- strcpy函数的实现
- VIM快捷(二):插入
- R入门
- def参数--review python
- 完全背包 POJ
- 剑指offer:(12)代码的完整性: 打印从1到最大的n位数
- [SYSU实训] GridWorld
- RapidMiner 数据读写
- VIM快捷(三):删除
- leetcode RomanToInt
- MYSQL explain详解
- Ubuntu 下同局域网主机访问Tomcat 服务器
- Android项目ViewPager+Fragment的基本使用
- SQLite数据库——案例:商品展示