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

需考虑大数问题

#-*-coding:utf-8-*-

class print_N:
    def __init__(self,n):
         assert n >= 1, 'Input error:n must >= 1'
         self.data = ['0'] * n
         self.print_number()
         
    def print_number(self):
       
        while self.Increment():
            i = 0
            while self.data[i] == '0':
                i += 1
            print ''.join(self.data[i:])
    
    def Increment(self):
        
        length = len(self.data)
        index = length - 1
        digit = int(self.data[index])
        digit += 1
        if digit == 10:  # 满10进1
            flag = True
            while flag and index > 0:
                self.data[index] = '0'
                index -= 1
                tmp = int(self.data[index]) + 1
                if tmp < 10:
                    flag = False
                    self.data[index] = str(tmp)
            if flag and index == 0:  # 当到达第一个位置时,如果符合满十进一的条件,则结束循环
                return False
        else:
            self.data[index] = str(digit)
        
        return True
if __name__ == '__main__':
    p = print_N(0)
    p = print_N(2)
    p = print_N(5) 
    
     
    
        
 
        
        

 

posted on 2018-05-08 11:41  当太阳不再发光  阅读(156)  评论(0编辑  收藏  举报