打印1到最大的n位数

来源:互联网 发布:linux查看path变量 编辑:程序博客网 时间:2024/05/14 11:02

剑指offer12题,开始觉得这题不难,一下就写出了如下的代码

package com.zjy.sword2offer;public class Print1toMaxN_1 {public static void print1toMaxN_1(int n){if(n<0)return;int max = (int)Math.pow(10, n);for(int i=1;i<max;i++)System.out.println(i);}public static void main(String[] args) {// TODO Auto-generated method stubprint1toMaxN_1(3);}}

结果发现自己忘了考虑大数的情况了,否则就溢出了,考虑大数则用字符串进行操作,代码如下

package com.zjy.sword2offer;public class Print1toMaxN_1 {public static void print1toMaxN_1(int n){if(n<0)return;StringBuffer sb = new StringBuffer(n);for(int i=0;i<n;i++)sb.append('0');while(!increment(sb)){PrintNum(sb);}}public static boolean increment(StringBuffer sb){int carry = 0;boolean overflow = false;int Len = sb.length()-1;for(int i=Len;i>=0;i--){int sum = sb.charAt(i) - '0' + carry;if(i==Len)sum++;if(sum>=10){if(i==0)overflow = true;else{sum -= 10;carry = 1;sb.setCharAt(i, (char)((int)'0'+sum));}}else{sb.setCharAt(i, (char)((int)'0'+sum));break;}}return overflow;}public static void PrintNum(StringBuffer sb){boolean begin = true;int Len = sb.length();for(int i=0;i<Len;i++){char ch = sb.charAt(i);if(begin && ch!='0')begin = false;if(!begin)System.out.print(ch);}System.out.println();}public static void main(String[] args) {// TODO Auto-generated method stubprint1toMaxN_1(3);}}

话说java里char和int的转换好蛋疼,char+int不能得到对应ASCLL码的字符,得强制转换来转换去的


0 0
原创粉丝点击