中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言中三種求回文數的算法是什么

發布時間:2020-12-02 10:01:41 來源:億速云 閱讀:209 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關c語言中三種求回文數的算法是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

題目描述

  • 注意:(這些回文數都沒有前導0
  • 1位的回文數有0,1,2,3,4,5,6,7,8,9   共10個;
  • 2位的回文數有11,22,33,44,55,66,77,88,99  共9個;

* 請問:n位的回文數有多少個?請編寫一個遞歸函數來解決此問題!!!

  • 【輸入形式】一行一個正整數,代表多少位
  • 【輸出形式】一行一個正整數,代表回文詩的個數
  • 【樣例輸入】2
  • 【樣例輸出】9

c語言中三種求回文數的算法是什么

輸入:
3
輸出:
90

輸入:
5
輸出:
900

**輸入:
10
輸出:
90000**

輸入:
8
輸出:
9000

輸入:
1
輸出:
10

思路分析

  1. 通過for循環讀入這個數,通過/和%操作將這個數據逆轉,然后再對比逆轉后的數字是否和原數字相等
  2. c語言中三種求回文數的算法是什么

  3. 通過for循環讀入這個數,每次取頭位一個數字和末位一個數字,依次比較這兩個數字是否相等,再去掉這兩個數字,直到剩下一個數字(位數為奇數)或者剩下兩個數字(位數為偶數)
  4. c語言中三種求回文數的算法是什么

  5. 通過數學關系,直接判斷位數,算出這個位數內的回文數個數;

    • 例如:99899
    • 可以把它分為兩半,取前面一半998,如果是回文數,其后面一半一定是與其相應位置對應,998為3位數
      字,**除第一位(不包含前導0)故與后半對應的位置那個數有9種選擇(1-9)外,其他位都與相應的位置有10種
      選擇(0-9)**,例如第二位和倒數第二位(0-9)
    • 所以可以總結出來相同的位數,位數為奇數奇數其回文數有9*10^(n/2)個,注意n/2是整數,位數為偶數的為
      910^(n/2-1)個,所以5位數字的的回文數有910*10=900個
    • 注意位數為1有10個(0-9),需要特殊處理

相關教程:C視頻教程

代碼描述

1. 第一種思路:
#include <stdio.h>
#include <math.h>
int reverse(long int i,long int *terminate)        //遞歸函數求數值的逆序
{
    if (i<=0){              //遞歸出口
        return 1;       
    }
    else{
        *terminate*=10;     //每次乘10升位數
        *terminate+=i%10;      //加上個位
        reverse(i/10,terminate);        //遞歸每次規模縮小
    }
    return 1;
}
int main ()
{
    int n;
    scanf ("%d",&n);            //讀入一個n,表示n位整數
   long int i;        
    int count=0;
    if (n==1){               //如果等于1,則有10個(0-9都是),特殊處理;
        printf ("10");
        return 0;
    }
    for (i=pow(10,n-1);i<pow(10,n);i++){       //從第一個n位數開始(10^(n-1)),到(10^n)-1
       long int terminate=0;                //定義一個逆序目標數
        reverse(i,&terminate);              //把i和逆序目標數傳入
        if (terminate==i){                  //逆序后還和原數相等,則可計數
            count++;
        }
    }
    printf ("%d",count);        //輸出個數
    return 0;
}

2. 第二種思路:
#include <stdio.h>
#include <math.h>
int judge(int i,int n)
{
    int first,last;
    if (n<=1){          //規模減小,直到n為1(偶數)或者0
        return 1;

    }
    else{
        first=i/pow(10,n-1);        //頭位數字
        last=i%10;                  //末位數字
        if (first!=last){           //頭位末尾不一樣直接退出
            return 0;
        }
        int tem=pow(10,n-1);        
    judge(i%tem/10,n-2);            //剔除頭尾剩下中間,位數減二

    }
}
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);      //循環入口
    long long high=pow(10,n);       //循環出口
    for (i=low;i<high;i++){
       if ( judge(i,n)==1){         //判斷i是否為回文,計數
           count++;
       }
    }
    printf ("%d",count);
    return 0;
}

3. 第三種思路:
#include <stdio.h>
#include <math.h>
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語言中三種求回文數的算法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民勤县| 故城县| 两当县| 定边县| 石城县| 沂南县| 石首市| 桓台县| 牙克石市| 莫力| 新龙县| 巫山县| 汪清县| 和政县| 修水县| 深州市| 马山县| 新闻| 平湖市| 尼木县| 赤壁市| 澳门| 泗水县| 江安县| 巴彦淖尔市| 资中县| 凯里市| 定日县| 那坡县| 楚雄市| 普格县| 玉溪市| 灌阳县| 古丈县| 延吉市| 饶河县| 土默特左旗| 黑龙江省| 弥渡县| 安达市| 凤翔县|