• 打印从1到最大的n位数


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

    思路

    先找出最大值,然后遍历输出

    public void print1ToMaxOfNDights1s(int n) {
    	int number = 1;
    	int i = 0;
    	while (i++ < n) {
    		number *= 10;
    	}
    	for (i = 1; i < number; i++) {
    		System.out.print(i + " ");
    	}
    	System.out.println();
    }
    

    陷阱:n过大时是大数问题,不能简单用int或者long数据输出,需要采用字符串或者数组表达大数。

    1. 采用字符串模拟加法
    //解决1 模拟加法
    public void print1ToMaxOfNDigits02(int n) {
        if (n < 0) {
            return;
        }
        char[] number = new char[n];
        for (int k = 0; k < number.length; k++) {
            number[k] = '0';
        }
        while (!increment(number)) {//模拟加法
            printCharNumber(number);//打印
        }
    }
    
    private void printCharNumber(char[] number) {
        boolean isBeginning0 = true;
        for (int i = 0; i < number.length; i++) {
            if (isBeginning0 && (number[i] - '0') != 0) {//忽略前面的0
                isBeginning0 = false;
            }
            if (!isBeginning0) {
                 System.out.print(number[i] - '0');
            }
        }
        System.out.println();
    }
    
    //对字符串进行加1操作,当number达到最大值后返回为true
    //低位加1 到10进位
    private boolean increment(char[] number) {
        int nTackOver = 0;//进位
        for (int i = number.length - 1; i >= 0; i--) {
            int nSum = (number[i] - '0') + nTackOver;
            // number[i]-'0'是把char转化为int,nTakeOver代表进位
            if (i == number.length - 1) {
                nSum++;
            }
            if (nSum >= 10) {
                if (i == 0) {
                    return true;//超出范围
                }
                nTackOver = 1;
                nSum -= 10;
                number[i] = (char) (nSum + '0');
            } else {
                number[i] = (char) (nSum + '0');
                break;//高位不变跳出循环
            }
        }
        return false;
    }
    
  • 相关阅读:
    C#细说多线程(下)
    C#细说多线程(上)
    C#:进程、线程、应用程序域(AppDomain)与上下文分析
    C#委托与事件
    SQL Server 查询优化器运行方式
    SQL优化之索引分析
    C#反射机制
    Sql注入
    JAVA内存泄漏解决办法
    spring4声明式事务—02 xml配置方式
  • 原文地址:https://www.cnblogs.com/aiguozou/p/11667743.html
Copyright © 2020-2023  润新知