17-打印从1到最大的n位数

题目:输入数字n,按顺序打印从1到最大的n位十进制数。(大整数问题)

def print_max_n(n):
    res = [0 for i in range(n)]
    while not is_max(res):
        res=list_plus_1(res)
        print(res)

def is_max(arrys):
    for arr in arrys:
        if arr != 9:
            return False
    return True

# 返回加1后的列表
def list_plus_1(arr):
    length = len(arr)
    carry = 0

    i=-1
    while i>=-1*length:
        if i==-1:
            if arr[-1] + 1 < 10:
                arr[-1] = arr[-1] + 1
            else:
                arr[-1] = arr[-1] + 1 - 10
                carry = 1
        else:
            if arr[i]+carry<10:
                arr[i] = arr[i]+carry
                carry=0
            else:
                arr[i]=arr[i]+carry-10
                carry=1
        i-=1
    return arr

注:

list_plus_1:用列表模拟字符串,该函数用来实现数值加1的操作,最后输出字符串时,只需要将列表拼接输出即可

is_max:用于判断该当前列表表示的数是否为要输出的最大数9999...999,如果达到最大,返回True

print_max_n:先调用is_max判断是否已达到最大数,如果没达到,调用list_plus_1,实现加1操作。如果要完善输出,可以在加一个函数,用来输出优化,将列表最前边的若干0不输出

posted @ 2019-08-14 10:33  尘世中一个迷途小书童  阅读(134)  评论(0编辑  收藏  举报