• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Python多法巧求“自冪數(shù)”

      2021-06-28 10:46:22牟曉東
      電腦報(bào) 2021年14期
      關(guān)鍵詞:運(yùn)算符水仙花三位數(shù)

      牟曉東

      在編程語(yǔ)言的教材中常出現(xiàn)一道求解“水仙花數(shù)”的經(jīng)典問(wèn)題,即某個(gè)三位整數(shù)每個(gè)數(shù)位上數(shù)字的三次冪之和等于它本身,比如“153 = 1^3 + 5^3 + 3^3”。其實(shí),水仙花數(shù)只是“自冪數(shù)”的一種,類似的還有四位數(shù)的“四葉玫瑰數(shù)”(各數(shù)位四次方之和等于本身的數(shù))、五位數(shù)的“五角星數(shù)”、六位數(shù)的“六合數(shù)”等。Python語(yǔ)法靈活,可以使用多種方法來(lái)完成自冪數(shù)的求解,在此略舉幾種水仙花數(shù)的編程方法:

      1.“整除”和“求余”數(shù)位分解法

      在Python中,運(yùn)算符“//”代表“整除”運(yùn)算,即求“整商”;而運(yùn)算符“%”則是進(jìn)行“求余”,利用這兩種運(yùn)算符可以將一個(gè)多位數(shù)的各位數(shù)字“分解”提取。在判斷一個(gè)三位數(shù)是否為水仙花數(shù)時(shí),首先構(gòu)建循環(huán)結(jié)構(gòu)“for i in range(100,1000):”,百位上的數(shù)字提取方法是通過(guò)“bai_wei = i//100”求“整商”來(lái)完成,比如計(jì)算“365//100”,結(jié)果就是“3”;十位上的數(shù)字提取方法是“shi_wei = (i%100)//10”,即先以100為除數(shù)進(jìn)行“求余”,再將這個(gè)中間結(jié)果除以10求“整商”,比如計(jì)算“(365%100)//10”,會(huì)先得到余數(shù)65,然后計(jì)算“65//10”得到6;個(gè)位上的數(shù)字提取方法是“ge_wei? = i%10”,即除以10求余數(shù),比如“365%10”的結(jié)果是5。

      循環(huán)中的if判斷條件是“bai_wei**3 + shi_wei**3 + ge_wei**3 == i:”,即各數(shù)位上的數(shù)字的三次方之和與該數(shù)相等。最后,通過(guò)print打印輸出變量i的數(shù)值,結(jié)果得到四個(gè)水仙花數(shù):153、370、371和407(如圖1)。

      2.三層循環(huán)嵌套法

      因?yàn)樗苫〝?shù)是對(duì)一個(gè)三位數(shù)進(jìn)行判斷,所以直接構(gòu)建三層循環(huán)嵌套來(lái)實(shí)現(xiàn)從100到999的順序遞增。最外層的“for bai_wei in range(1,10):”控制百位數(shù)字循環(huán),注意要從1開(kāi)始(range()中的起始值和終止值參數(shù)為“左閉右開(kāi)”區(qū)間);中間層的十位數(shù)字循環(huán)是“for shi_wei in range(0,10):”;內(nèi)部的個(gè)位數(shù)字循環(huán)是“for ge_wei in range(0,10):”,變量my_data是計(jì)算存儲(chǔ)每個(gè)三位數(shù)的數(shù)值大小,即“bai_wei*100+shi_wei*10+ge_wei”;判斷條件與之前相同,最后也是打印輸出結(jié)果,同樣會(huì)得到四個(gè)水仙花數(shù):153、370、371和407(如圖2)。

      3.map()函數(shù)映射法

      如果充分利用Python中的各種內(nèi)置函數(shù),比如map()映射函數(shù),可以非常巧妙地快速“提取”出每個(gè)多位數(shù)上各數(shù)位的數(shù)字。首先,同樣是通過(guò)“for i in range(100,1000):”構(gòu)建出循環(huán)結(jié)構(gòu);然后使用“序列解包”的方式,同時(shí)為三個(gè)變量賦值——“bai_wei,shi_wei,ge_wei = map(int,str(i))”,借助map()函數(shù)將每個(gè)三位數(shù)先通過(guò)“str(i)”轉(zhuǎn)換為字符串,再將int()函數(shù)映射至剛剛生成的字符串序列(迭代對(duì)象),就“還原”得到了三個(gè)整型數(shù)字,分別賦值給三個(gè)對(duì)應(yīng)的變量。

      接下來(lái)仍是使用相同的判斷語(yǔ)句和print()輸出語(yǔ)句,同樣會(huì)得到四個(gè)水仙花數(shù):153、370、371和407(如圖3)。

      4.總結(jié)

      前兩種方法的代碼量相似,數(shù)位分解法的難點(diǎn)在于使用整除和求余進(jìn)行組合運(yùn)算,使用一層循環(huán)結(jié)構(gòu),得到各數(shù)位上的數(shù)字;循環(huán)嵌套法需要構(gòu)建與數(shù)位個(gè)數(shù)相同的循環(huán)數(shù),必須要特別注意循環(huán)遞進(jìn)中的代碼格式縮進(jìn)。map()函數(shù)映射法比較巧妙,借助str()和int()進(jìn)行字符串與整型轉(zhuǎn)換,代碼量非常精簡(jiǎn)。

      如果題目不是求解水仙花,而是位數(shù)更多的自冪數(shù),比如“五角星數(shù)”,前兩種方法就分別需要多構(gòu)建兩個(gè)“整除求余”和兩層循環(huán),代碼量和復(fù)雜度都會(huì)增加不少;而map()函數(shù)映射法只需要簡(jiǎn)單地增加“wan_wei”和“qian_wei”兩個(gè)變量即可,然后修改for循環(huán)中的range()起始值(10000,100000)和if條件中的各位數(shù)的冪指數(shù)(由3改為5),代碼量增加得也非常少(仍為4行),最終運(yùn)行得到三個(gè)五角星數(shù):54748、92727和93084(如圖4)。

      如果再?gòu)?fù)雜些,比如求解八位的“八仙數(shù)”、九位的“重陽(yáng)數(shù)”,大家不妨對(duì)比測(cè)試一下不同方法的編程效率。

      猜你喜歡
      運(yùn)算符水仙花三位數(shù)
      擺三位數(shù)
      老祖?zhèn)魇诨具\(yùn)算符
      積是三位數(shù)還是四位數(shù)
      水仙花
      擺三位數(shù)
      養(yǎng)水仙花
      三位數(shù)密碼
      C++運(yùn)算符重載剖析
      表達(dá)式求值及符號(hào)推導(dǎo)
      C++中運(yùn)算符的重載應(yīng)用
      衡南县| 涪陵区| 麻城市| 玛沁县| 大理市| 洛扎县| 肥东县| 阜南县| 班玛县| 万年县| 固原市| 行唐县| 宝坻区| 九江市| 海林市| 同江市| 鸡东县| 建平县| 泽普县| 乐平市| 漳浦县| 皋兰县| 灯塔市| 城固县| 黑河市| 托里县| 衡东县| 思南县| 营口市| 正镶白旗| 金湖县| 常德市| 德惠市| 新兴县| 自贡市| 邻水| 涡阳县| 砀山县| 高州市| 灵台县| 普安县|