剑指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 stub
print1toMaxN_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 stub
print1toMaxN_1(3);
}
}
话说java里char和int的转换好蛋疼,char+int不能得到对应ASCLL码的字符,得强制转换来转换去的