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

题目:


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

参考大数运算的方法。考虑到位数会很大,所以采用字符串的形式解决。对输入的n,创建一个长度为n的数组,分别存放打印时数字的每一位,高位用0补足。为方便使用字符串打印结果,所以数组中存的都是字符型式的0-9

解法:

def print_one_max_number(n):
    if n <= 0:
        return False
    number = ['0' for x in range(n)]
    for i in range(n):    # 打印1位数到n位数(i表示的位数为i+1,i=0表示位数为1,i=1表示位数为2...)
        func(number, n, i)


# 此函数依次改变位数上的值来打印这个数
def func(number, n, i):
    if not i:    # 如果位数是1(i=0),直接改变个位数
        for j in range(10):
            number[n - i - 1] = str(j)
            print_number(n, number)
        return
    for j in range(1, 10):    # 当位数大于1 时,依次确定从高位向低位的值。
        number[n - i - 1] = str(j)
        func(number, n, i - 1)


#    打印number数组中存放的具体数值
def print_number(n, number):
    for i in range(n):
        if number[i] != '0':
            print(''.join(number[i:]))
            return


# 测试:
print_one_max_number(3)
posted @ 2019-05-28 20:10  长安223  阅读(256)  评论(0编辑  收藏  举报