大数问题-打印1到最大的n位数
来源:互联网 发布:好牧人12网络牧养中心 编辑:程序博客网 时间:2024/06/09 03:20
问题描述
输入数字n,按顺序打印出从0到最大的n位十进制数。比如输入4,则需要输出0,,1,2,3,···, 9999
思路
需要注意两点:
- 直接使用int或long类型,当n比较大时会溢出
- 如何快速的判断出到达了最大的n位数
为解决第一点,我们需要使用字符串模拟加法,这样就不会溢出。第二点快速判断到达最大n位数,只需要我们对每次进位位进行判断,看进位位是否是最高位,如果是表示已经到了最大n位数。
代码实现
思路一:直接使用字符串模拟每次+1操作
public class Main { public static void main(String[] args) { int n=4; char[] ch = new char[n]; for(int i=0;i<n;i++){ ch[i] = '0'; } add_1(ch); } /** * 模拟加法 */ public static void add_1(char[] ch){ // 当到达最大n位数时跳出 while(true){ // 个位进行0-9依次遍历 for(int i=0;i<10;i++){ ch[ch.length-1] = (char)('0'+i); print(ch); } for(int i=ch.length-2;i>=0;i--){ if(ch[i]!='9'){ // 进位位加1 ch[i] = (char)(ch[i]+1); // 进位结束跳出 break; }else{ // 进位位为9,继续进位,当前进位位变为0 ch[i] = '0'; if(i==0) return; } } } } // 打印函数,从第一个非零位开始打印 public static void print(char[] ch){ boolean flag = false; for(int i=0;i<ch.length;i++){ if(flag){ System.out.print(ch[i]); continue; } if(ch[i]!='0'){ flag = true; System.out.print(ch[i]); } if(!flag && i==ch.length-1){ System.out.print(ch[i]); } } System.out.println(); }}
思路二:使用全排列思路,每位相当于有10种排列可能(0~9)。
借鉴全排列实现如下
public class Main4 { public static void main(String[] args) { char[] ch = new char[4]; for(int i=0;i<ch.length;i++){ ch[i] = '0'; } array(ch, 0); } public static void array(char[] ch,int current){ if(current==ch.length-1){ for(int i=0;i<10;i++){ ch[current] = (char)(i+'0'); print(ch); } }else{ for(int i=0;i<10;i++){ ch[current] = (char)(i+'0'); array(ch, current+1); } } } // 打印函数 public static void print(char[] ch){ boolean flag = false; for(int i=0;i<ch.length;i++){ if(ch[i]!='0') flag = true; if(flag) System.out.print(ch[i]); } if(flag) System.out.println(); }}
阅读全文
0 0
- 打印1到最大的n位数(大数问题)
- 大数问题-打印1到最大的n位数
- 打印从1到最大的n位数(考虑大数问题)
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 面试题12:打印1到最大的n位数-大数问题-递归实现多层循环
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 打印1到最大的n位数:大数问题,全排列实现
- 【编程题目】Pq.7--打印1到最大的n位数(关于大数问题的探讨)
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- @RestController与@Controller区别
- Java
- 简单工厂模式
- java 中的值传递,与引用传递
- 03.20 Linux文件属性
- 大数问题-打印1到最大的n位数
- Java多线程系列--“基础篇”07之 线程休眠
- using ctags and cscope in vim
- 应用scikit-learn做文本分类
- tensorflow机器学习之利用CNN卷积神经网络进行面部表情识别的实例代码
- Python所用的公司
- 根据十进制或者十六进制MAC范围抓取全部运营商
- 模仿高德地图搜索控件
- 一种自动关闭对话框的简单方法