Heim  >  Artikel  >  Backend-Entwicklung  >  Drei Algorithmen zum Finden von Palindromzahlen in der C-Sprache

Drei Algorithmen zum Finden von Palindromzahlen in der C-Sprache

little bottle
little bottlenach vorne
2019-04-30 09:30:3810441Durchsuche

Der heute vom Herausgeber geteilte Artikel enthält drei Algorithmen zur Beschreibung von Palindromzahlen in der C-Sprache. Wenn Sie sich für Palindromzahlen in der C-Sprache interessieren, können Sie einen Blick darauf werfen zu dir.

Problembeschreibung

  • Hinweis: (Diese Palindromzahlen haben keine führende 0)
  • 1-stellige Palindromzahlen haben 0, 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10 insgesamt;
  • 2-stellige Palindromzahlen sind 11, 22, 33, 44, 55, 66, 77, 88, 99 9 insgesamt;

* Darf ich fragen: Wie viele n-stellige Palindrome gibt es? Bitte schreiben Sie eine rekursive Funktion, um dieses Problem zu lösen! ! !

  • [Eingabeformat] Eine positive Ganzzahl pro Zeile, die die Anzahl der Ziffern darstellt
  • [Ausgabeformat] Eine positive Ganzzahl pro Zeile, die die Anzahl der Palindromgedichte darstellt
  • [Beispieleingabe] 2
  • [Beispielausgabe] 9

Drei Algorithmen zum Finden von Palindromzahlen in der C-Sprache

Eingabe:
3
Ausgabe:
90

Eingabe:
5
Ausgabe:
900

**Eingabe:
10
Ausgabe:
90000 **

Eingabe:
8
Ausgabe:
9000

Eingabe:
1
Ausgabe:
10

Ideenanalyse

  1. Lesen Sie die Zahl durch eine for-Schleife, kehren Sie die Daten durch /- und %-Operationen um und vergleichen Sie dann, ob die umgekehrte Zahl gleich der ursprünglichen Zahl ist
  2. Drei Algorithmen zum Finden von Palindromzahlen in der C-Sprache

  3. Lesen Sie diese Zahl durch eine for-Schleife, nehmen Sie jedes Mal die erste und die letzte Zahl und vergleichen Sie, ob die beiden Zahlen gleich sind. , dann entfernen Sie diese beiden Zahlen, bis eine Zahl (eine ungerade Anzahl von Ziffern) oder zwei Zahlen (eine gerade Anzahl von Ziffern) übrig bleiben
  4. Drei Algorithmen zum Finden von Palindromzahlen in der C-Sprache

  5. Verwenden Sie die mathematische Beziehung, um die Anzahl der Ziffern direkt zu bestimmen und die Anzahl der Palindrome innerhalb dieser Ziffer zu berechnen

    • Zum Beispiel: 99899
    • kann in zwei Hälften geteilt werden, nehmen Sie die erste Hälfte 998, wenn es sich um eine Palindromzahl handelt, muss die zweite Hälfte der entsprechenden Position entsprechen, 998 ist ein dreistelliges
      Zeichen, ** Mit Ausnahme des ersten Bits (ohne führende 0) gibt es 9 Auswahlmöglichkeiten (1-9) für die Position, die der zweiten Hälfte entspricht, die anderen Ziffern haben 10 Auswahlmöglichkeiten für die entsprechende Position (0-9)* *, z Beispiel: die zweite Ziffer und die vorletzte Ziffer (0-9)
    • , sodass die gleiche Anzahl von Ziffern zusammengefasst werden kann. Wenn die Anzahl der Ziffern eine ungerade Zahl ist, ist die Palindromzahl 9*10^( n/2) Beachten Sie, dass n/2 eine ganze Zahl ist und die Anzahl der Ziffern einer geraden Zahl
    • 9
      10^(n/2-1) beträgt, also die Palindromzahl der 5-stelligen Zahlen ist 910*10 =900
    • Beachten Sie, dass es 10 Ziffern (0-9) für 1 gibt, die eine spezielle Verarbeitung erfordern
Verwandte Tutorials:

C-Video-Tutorial

Codebeschreibung

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;
}

Das obige ist der detaillierte Inhalt vonDrei Algorithmen zum Finden von Palindromzahlen in der C-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen