陳新龍
數(shù)根:又稱數(shù)字根,數(shù)字的根是自然數(shù)的一種性質(zhì),而且每一個(gè)自然數(shù)都有一個(gè)數(shù)根。將正整數(shù)的各個(gè)位數(shù)相加后,若加完后的值大于等于10的話,則繼續(xù)將各位數(shù)進(jìn)行橫向相加直到其值小于10為止,所得到的數(shù)即為數(shù)根。
換句話說,數(shù)根是將一個(gè)數(shù)重復(fù)做其各位數(shù)字之和,直到其值小于10為止,則所得的值為該數(shù)的數(shù)根。例如54817的數(shù)根為7,因?yàn)?+4+8+1+7=25,25大于10則再加一次,2+5=7,7小于10,則7為54817的數(shù)根。
數(shù)根中也有一種巧合,X+9與X的數(shù)根相同,即一個(gè)數(shù)加9后它的數(shù)根不變,例如29的數(shù)根是2,恰巧20的數(shù)根也是2,數(shù)學(xué)就是這么神奇。
數(shù)字越大,求解數(shù)根的運(yùn)算量也就越多,我們就可以用編程來計(jì)算數(shù)根。用戶輸入數(shù)字,然后由程序來求解,畢竟這類重復(fù)計(jì)算可是計(jì)算機(jī)的強(qiáng)項(xiàng)。
對(duì)小朋友來說程序的難度不小,要考慮需要設(shè)置哪些變量。根據(jù)數(shù)根的計(jì)算方法我們可以預(yù)計(jì)運(yùn)行中會(huì)用循環(huán)獲取目標(biāo)數(shù)的各位上的數(shù)字,用條件判斷停止循環(huán)。但是如何才能保證最終的數(shù)字之和小于10,是否需要用到嵌套循環(huán)呢?這些都是我們要思考的。
假設(shè)我們輸入數(shù)字1234,(1+2+3+4=10=>1+0=1),可以得出最終的數(shù)根值為1。
代碼分析:
程序運(yùn)行,用戶先輸入一個(gè)正整數(shù),變量n保存用戶輸入的數(shù)字。變量“長度”為n的字符數(shù)。
接下來進(jìn)入循環(huán)過程,首先設(shè)置一個(gè)執(zhí)行條件n的字符數(shù)小于2。進(jìn)入循環(huán)之后,還需要設(shè)置兩個(gè)變量i和數(shù)根,變量i就是作為循環(huán)中的內(nèi)循環(huán)的變量,數(shù)根用來計(jì)算提取每個(gè)各位數(shù)字之和。
如何提取各位數(shù)字之和,就需要用到嵌套循環(huán)了,進(jìn)行循環(huán)判斷直到變量i大于長度時(shí)跳出循環(huán)。將n的數(shù)字第一位提取出,加到數(shù)根中,變量i加1。開始下一次循環(huán)取出n的第二位并累加。
這里我們可以將數(shù)字帶入程序中測試,n為1234,最終數(shù)根的結(jié)果為10,但是10并不是我們需要的結(jié)果,還得重復(fù)進(jìn)行提取累加,所以在內(nèi)循環(huán)結(jié)束后,我們還需要進(jìn)行一次判斷,將長度設(shè)置數(shù)根的字符數(shù),n設(shè)置為數(shù)根。再次進(jìn)行比較判斷看看目前數(shù)根的位數(shù)(字符數(shù))是否小于2,最終直到n的字符數(shù)小于2跳出循環(huán)。也可以用當(dāng)前數(shù)根n小于10作為跳出循環(huán)的判斷。
總結(jié):由于需要用到循環(huán)嵌套,對(duì)于小朋友來說求數(shù)根的難度還是不小,需要一定的邏輯思維能力??梢酝ㄟ^用戶自定義輸入來測試最終結(jié)果是否與答案相符合。
這種要在循環(huán)中嵌套另一個(gè)循環(huán)的結(jié)構(gòu)比較難于理解,需要一定分析程序走向的能力,要多注意出現(xiàn)不同可能性的情況。大家也可以在這道題目的基礎(chǔ)上進(jìn)行相關(guān)練習(xí)。