屠新兵
摘要:在計(jì)算機(jī)編程語言的學(xué)習(xí)過程中,我們會遇到一些特殊數(shù)的編程處理方法,包括質(zhì)數(shù)、完全數(shù)、水仙花數(shù)、同構(gòu)數(shù)、回文數(shù)等等。該文主要以C語言編程為例,對這些特殊數(shù)的編程方法進(jìn)行探索,讓大家對循環(huán)語句和分支語句有進(jìn)一步的了解。
關(guān)鍵詞:C語言;特殊數(shù)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)28-0081-02
在計(jì)算機(jī)編程語言的學(xué)習(xí)過程中,我們會遇到一些特殊數(shù)的編程處理方法,包括質(zhì)數(shù)、完全數(shù)、水仙花數(shù)、同構(gòu)數(shù)、回文數(shù)等等。當(dāng)我們剛聽到這些名詞的時(shí)候,既感到陌生,又覺得好奇,有一種立即解決問題的沖動(dòng)。當(dāng)我們對這些特殊數(shù)進(jìn)行分析時(shí)會發(fā)現(xiàn),它們中很多都可以用一種最原始的方法——窮舉法來解決,有些則不一定。而窮舉法是最常用的一種方法,是C語言中的一個(gè)重要知識點(diǎn),在近幾年江蘇省的職校計(jì)算機(jī)對口單招考試中也是一個(gè)重要考點(diǎn)。如果掌握了其要領(lǐng),實(shí)現(xiàn)起來就會得心應(yīng)手,本文主要以C語言編程為例,對這些特殊數(shù)的編程方法進(jìn)行探索,希望給參加江蘇省的職校計(jì)算機(jī)對口單招考試的學(xué)生及編程愛好者帶來一定的幫助。
對于這些特殊數(shù)的處理,很多都可以用窮舉法來解決。我們先來了解一下,什么是窮舉法。窮舉法的基本思想是根據(jù)題目的部分條件確定答案的大致范圍,并在此范圍內(nèi)對所有可能的情況逐一驗(yàn)證,直到全部情況驗(yàn)證完畢。若某個(gè)情況驗(yàn)證符合題目的全部條件,則為本問題的一個(gè)解;若全部情況驗(yàn)證后都不符合題目的全部條件,則本題無解。下面通過幾個(gè)實(shí)例,來對特殊數(shù)編程處理方法進(jìn)行探索。
1質(zhì)數(shù)
質(zhì)數(shù)的定義:除了1和本身外,不能被其他任何自然數(shù)整除的自然數(shù)叫做質(zhì)數(shù),又叫做素?cái)?shù)。
例:編一函數(shù)int fun(int x),判斷x是否為質(zhì)數(shù)。
分析:要處理好該問題,就要從定義入手,定義強(qiáng)調(diào)質(zhì)數(shù)只能被1和本身整除,不能被其他任何自然數(shù)整除,我們就要圍繞這個(gè)來進(jìn)行驗(yàn)證,也就是說:除了1和本身以外,如果能找到其他能整除的自然數(shù),就不是質(zhì)數(shù)。本題就是典型的窮舉法的例子。函數(shù)如下:
int fun(int x)
{ int i;
for(i=2;i if(x%i==0) return 0; /* 能被其他自然數(shù)整除就不是質(zhì)數(shù) */ return 1; } 拓展:僅判斷一個(gè)數(shù)是否為質(zhì)數(shù),是比較簡單的,實(shí)際應(yīng)用中往往要找出多個(gè)質(zhì)數(shù),這就需要在循環(huán)的外面再嵌套一個(gè)循環(huán),用于控制查找的范圍,再將質(zhì)數(shù)作相應(yīng)的處理即可。驗(yàn)證哥德巴赫猜想則是兩次判斷質(zhì)數(shù)的例子。 2 完全數(shù) 完全數(shù)的定義:如果一個(gè)數(shù)恰好等于它的所有的真因子(即除了自身以外的約數(shù))之和,則稱該數(shù)為完全數(shù),又稱完美數(shù)或完備數(shù)。(如:6=1+2+3,28=1+2+4+7+14,6和28都是完全數(shù)) 例:編一函數(shù)fun(int x),判斷x是否為完全數(shù)。 分析:本題的關(guān)鍵就是將x以內(nèi)的所有數(shù)過濾一下,從中找出真因子進(jìn)行累加,最后看累加的和與原數(shù)是否相等。本題也是典型的窮舉法的例子。函數(shù)如下: int fun(int x) { int i,s=1; for(i=2;i<=x/2;i++) if(x%i==0) s+=i; /* 能整除的累加 */ return s==x; } 拓展:如果需要找出多個(gè)完全數(shù),就要確定查找的范圍,在循環(huán)外再嵌套一個(gè)循環(huán)。 3水仙花數(shù) 水仙花數(shù)的定義:水仙花數(shù)是指一個(gè) n 位數(shù) ( n≥3 ),它的每個(gè)位上的數(shù)字的 n(以3為例) 次冪之和等于它本身,又稱阿姆斯特朗數(shù)。(例如: 153=1^3 + 5^3+ 3^3,153就是一個(gè)水仙花數(shù))。 例:編一函數(shù)int fun(int x),判斷x是否為水仙花數(shù)(3次冪)。 分析:本題的關(guān)鍵就是要找出x的每一位數(shù)y,如果x僅僅是三位數(shù),可以分別求出百位數(shù)、十位數(shù)和個(gè)位數(shù),用b=x/100;s=x/10%10;g=x%10;可以解決,如果不知道x的位數(shù),可以循環(huán)求出它的最低位,再求出最低位的立方和來實(shí)現(xiàn)。函數(shù)如下: int fun(int x) { int i,n=x,a,s=0; while(x) {a=x%10; /* 取出最低位 */ s+=a*a*a; /* 求出最低位立方和 */ x/=10; /* x去掉最低位 */ } return s==n; /* 原數(shù)n與各位數(shù)字立方和s相等就是水仙花數(shù) */ } 拓展:同樣若要找出若干個(gè)水仙花數(shù),就是在循環(huán)外再嵌套一個(gè)循環(huán),用于控制查找的范圍,再把水仙數(shù)作相應(yīng)處理,而查找并判斷的過程則是窮舉法。 4同構(gòu)數(shù) 同構(gòu)數(shù)的定義:同構(gòu)數(shù)是出現(xiàn)在它的平方的右邊的數(shù)。(例如,6出現(xiàn)在其平方數(shù)36的右邊,76出現(xiàn)在其平方數(shù)5776的右邊,6與76都是同構(gòu)數(shù)。) 例:編一函數(shù)fun(int x,int a[]),找出x(x<1000)以內(nèi)的所有同構(gòu)數(shù),存放于a數(shù)組,返回同構(gòu)數(shù)的個(gè)數(shù)。 分析:本題就是對x以內(nèi)所有的數(shù)進(jìn)行過濾,求出x的平方,看看是否出現(xiàn)在平方數(shù)的右邊,同時(shí)要注意,x可能是一位數(shù)、兩位數(shù)或三位數(shù),就要分別用到%10,%100,%1000。函數(shù)如下: int fun(int x,int a[]) { int i,y,m=10,n=0; for(i=2;i { if(i>10)m=100; if(i>100)m=1000; y=x*x; if(y%m==x)a[n++]=x;} return n; } 拓展:對于同構(gòu)數(shù),要根據(jù)自身的位數(shù)來確定相應(yīng)的m,即除以m取余得到的數(shù)的位數(shù)與其一致,當(dāng)x的范圍擴(kuò)大時(shí),m也要隨之發(fā)生變化。 5回文數(shù) 回文數(shù)的定義:正讀與反讀都一樣的數(shù)。(如:1,11,121,1221等等) 例:編一函數(shù)int fun(int x),判斷x是否為回文數(shù)。 分析:要判斷x是否為回文數(shù),首先要求出x的逆序數(shù),然后判斷其逆序數(shù)是否與本身相等。函數(shù)如下: int fun(int x) { int y=0,z=x; while(x) { y=y*10+x%10; x/=10; } return y==z; } 拓展:實(shí)際應(yīng)用中,需要判斷多個(gè)回文數(shù),那就需要對多個(gè)數(shù)逐一進(jìn)行判斷。同時(shí),將一個(gè)非回文數(shù),加上該數(shù)的逆序數(shù)后,就可能成為回文數(shù)。若仍然是非回文數(shù),則重復(fù)若干次上述步驟,總能得到回文數(shù)。 以上特殊數(shù)的處理方法是中職學(xué)生在實(shí)際應(yīng)用中,經(jīng)常遇到的,也是近幾年江蘇省計(jì)算機(jī)專業(yè)對口單招考試中主要考點(diǎn),主要考查學(xué)生對循環(huán)和分支語句的靈活運(yùn)用。需要大家平時(shí)多注意積累,多動(dòng)腦筋,記住特殊數(shù)的處理方法,并將方法靈活運(yùn)用到平時(shí)的學(xué)習(xí)中去。中職學(xué)生包括廣大編程愛好者要多總結(jié),從而對循環(huán)及分支語句的使用能有進(jìn)一步的了解。當(dāng)然編程方法不唯一,希望大家八仙過海,各顯神通。 參考文獻(xiàn): [1] 李秉璋.C語言程序設(shè)計(jì)與訓(xùn)練[M].大連:理工大學(xué)出版社,2011. [2] 孔線麗.計(jì)算機(jī)專業(yè)綜合理論復(fù)習(xí)用書 [M].2版.北京:原子能出版社,2007.