pythonは1000以内のアームストロング数を探しています

8461 ワード

文書ディレクトリ
  • 方法1:ビット数を算出しforサイクル
  • 方法2:whileサイクル+判定ビット数
  • アームストロング数の定義:1つのnビットの正の整数がその各数字のn次方の和に等しい場合、この数をアームストロング数と呼ぶ.たとえば1^3+5^3+3^3=153です.
    1000以内のアームストロング数:1,2,3,4,5,6,7,8,9,153,370,371,407.
    方法1:ビット数を算出してforサイクルを用いる
    コアコードは
    length = len(str(num))							# num      ,   int
    for ii in range(length):						# length      
        num_str = str(num)
        sum_armstrong += int(num_str[ii])**length	  # num_str[]            
        
    if sum_armstrong == num:
        return True
    

    完全なコードは次のとおりです.
    def is_armstrong(num):
        length = len(str(num))
        sum_armstrong = 0
        for ii in range(length):
            sum_armstrong += int(str(num)[ii])**length
    
        if sum_armstrong == num:
            return True
        else:
            return False
    
    for num in range(1,1000):
        if is_armstrong(num):
            print(num, end = ' ')
    

    実行効果:
    1 2 3 4 5 6 7 8 9 153 370 371 407 
    Process finished with exit code 0
    

    方法2:whileサイクル+判定ビット数
    コアコード:
    temp = num									    #                  
    while temp > 0:
        sum_armstrong += (temp%10)**length			  #        
        temp //= 10									#   10,    ,             
        
    if sum_armstrong == num:
        return True
    

    完全なコードは次のとおりです.
    def is_armstrong(num):
        temp = num                          
        sum_armstrong = 0
        length = len(str(num))
        while temp > 0:
            sum_armstrong += (temp%10)**length   #        
            temp //= 10                     
        if sum_armstrong == num:
            return True
        else:
            return False
    
    for num in range(1,1000):
        if is_armstrong(num):
            print(num, end = ' ')
    
    

    まとめ:whileサイクルはビット数が不確定な場合に有効であり、forサイクルはサイクル回数などのより多くの情報を事前に計算する必要がある.一方whileは不要であり,脱退条件を作成し,計算しながら判断することができる.