這篇文章主要介紹“如何在c語言中描述回文數(shù)”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何在c語言中描述回文數(shù)”文章能幫助大家解決問題。
創(chuàng)新互聯(lián)公司成立于2013年,公司以網(wǎng)站設計、做網(wǎng)站、系統(tǒng)開發(fā)、網(wǎng)絡推廣、文化傳媒、企業(yè)宣傳、平面廣告設計等為主要業(yè)務,適用行業(yè)近百種。服務企業(yè)客戶上千多家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設、創(chuàng)意設計、宣傳推廣等服務。 通過專業(yè)的設計、獨特的風格,為不同客戶提供各種風格的特色服務。題目描述
注意:(這些回文數(shù)都沒有前導0)
1位的回文數(shù)有0,1,2,3,4,5,6,7,8,9 共10個;
2位的回文數(shù)有11,22,33,44,55,66,77,88,99 共9個;
* 請問:n位的回文數(shù)有多少個?請編寫一個遞歸函數(shù)來解決此問題?。。?/p>
【輸入形式】一行一個正整數(shù),代表多少位
【輸出形式】一行一個正整數(shù),代表回文詩的個數(shù)
【樣例輸入】2
【樣例輸出】9
輸入:
3
輸出:
90
輸入:
5
輸出:
900
**輸入:
10
輸出:
90000**
輸入:
8
輸出:
9000
輸入:
1
輸出:
10
思路分析
通過for循環(huán)讀入這個數(shù),通過/和%操作將這個數(shù)據(jù)逆轉,然后再對比逆轉后的數(shù)字是否和原數(shù)字相等
通過for循環(huán)讀入這個數(shù),每次取頭位一個數(shù)字和末位一個數(shù)字,依次比較這兩個數(shù)字是否相等,再去掉這兩個數(shù)字,直到剩下一個數(shù)字(位數(shù)為奇數(shù))或者剩下兩個數(shù)字(位數(shù)為偶數(shù))
通過數(shù)學關系,直接判斷位數(shù),算出這個位數(shù)內(nèi)的回文數(shù)個數(shù);
例如:99899
可以把它分為兩半,取前面一半998,如果是回文數(shù),其后面一半一定是與其相應位置對應,998為3位數(shù)字,**除第一位(不包含前導0)故與后半對應的位置那個數(shù)有9種選擇(1-9)外,其他位都與相應的位置有10種選擇(0-9)**,例如第二位和倒數(shù)第二位(0-9)
所以可以總結出來相同的位數(shù),位數(shù)為奇數(shù)奇數(shù)其回文數(shù)有9*10^(n/2)個,注意n/2是整數(shù),位數(shù)為偶數(shù)的為910^(n/2-1)個,所以5位數(shù)字的的回文數(shù)有910*10=900個
注意位數(shù)為1有10個(0-9),需要特殊處理
代碼描述
1. 第一種思路:
#include#include int reverse(long int i,long int *terminate) //遞歸函數(shù)求數(shù)值的逆序 { if (i<=0){ //遞歸出口 return 1; } else{ *terminate*=10; //每次乘10升位數(shù) *terminate+=i%10; //加上個位 reverse(i/10,terminate); //遞歸每次規(guī)??s小 } return 1; } int main () { int n; scanf ("%d",&n); //讀入一個n,表示n位整數(shù) long int i; int count=0; if (n==1){ //如果等于1,則有10個(0-9都是),特殊處理; printf ("10"); return 0; } for (i=pow(10,n-1);i 2. 第二種思路:
#include#include int judge(int i,int n) { int first,last; if (n<=1){ //規(guī)模減小,直到n為1(偶數(shù))或者0 return 1; } else{ first=i/pow(10,n-1); //頭位數(shù)字 last=i%10; //末位數(shù)字 if (first!=last){ //頭位末尾不一樣直接退出 return 0; } int tem=pow(10,n-1); judge(i%tem/10,n-2); //剔除頭尾剩下中間,位數(shù)減二 } } int main () { int n; scanf("%d",&n); if (1==n){ printf ("10"); return 0; } int i; int count=0; long long low=pow(10,n-1); //循環(huán)入口 long long high=pow(10,n); //循環(huán)出口 for (i=low;i 3. 第三種思路:
#include#include int main (){ int n; scanf ("%d",&n); int ji=9*pow(10,n/2),ou=9*pow(10,n/2-1); if (n==1){ printf ("10"); } else if (n==2){ printf ("%d",9); } else if (n%2==1){ printf ("%d",ji); } else if (n%2==0){ printf("%d",ou); } return 0; } 關于“如何在c語言中描述回文數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
文章標題:如何在c語言中描述回文數(shù)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/gcpoe.html