1~n之間的迴文數,素數,親密數,水仙花數特殊數據的提取

 用四個子函數來判斷一個數是不是 滿足迴文數 素數 親密數 水仙花數。

  其中判斷迴文數,先把輸入的字符串數字入棧,將棧與原字符串用strcmp()函數進行比較是否一樣進行比較是不是迴文數。

  其中用到將字符轉化爲整型的函數atoi(m),m爲字符串數組。還有將整型數字轉化爲字符串的函數itoa(x,m,10)其中x爲整型數字,m爲存字符串的數組,10位基數(就是需要轉換的進制數)。

  迴文數若將n的各位數字反向排列所得自然數n1與n相等,則稱n爲一回文數。例如,若n=1234321,則稱n爲一回文數;但若n=1234567,則n不是迴文數。

 素數:大於一的除一和本身以外不能被其他數整除的數。

 親密數如果a的所有正因子和等於b,b的所有正因子和等於a,因子包括1但不包括本身,且a不等於b,則稱a,b爲親密數對。

水仙花數三位自冪數:水仙花數

實訓代碼:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

int huiwen(char m[],int len)//傳入字符串m和它的長度

{

    int i, j = 0;

    char *M;

    M = (char *)malloc(sizeof(char)*(len + 1));//生成動態數組

    for (i = len - 1; i>-1;i--)

    {

        M[j++] = m[i];

 

    }

    M[j] = '\0';//將數組以\0結尾變爲字符串形式

    if (strcmp(m, M) == 0)

        return 1;

    else

        return 0;

    free(M);//釋放空間

}

int sushu(int x)//判斷X是不是素數

{

    int i;

    for (i = 2; i <= sqrt(x);i++)//sqrt是開方

    {

        if (x%i== 0)

            return 0;

    }

 

    return 1;

 

}

int qinmishu(int x, int y)//判斷 x y是不是親密數

{

    int sum = 0, sum2 = 0;

    int i, j;

    for (i = 1; i <= x / 2; i++)

    {

        if (x%i== 0)

            sum += i;//x的因子之和

    }

    for (j = 1; j <= y / 2; j++)

    {

        if (sum%j == 0)

            sum2 += j;//y的因子之和

    }

    if (sum2 == x&&sum ==y)//滿足條件返回真(1否者返回假(0

        return 1;

    else

        return 0;

}

int shuixianhua(int x)//判斷是不是水仙花數

{

    int a, b, c, sum;

    a = x / 100;//取百位

    b = (x - a * 100) /10;//取十位

    c = x % 10;//取個位

    sum = a*a*a + b*b*b + c*c*c;//求和

    if (sum == x)

        return 1;

    else

        return 0;

}

int main()

{

    int a, b, c, d, len, num;

    int i, j,n;

    char *s, *m;

    s = (char *)malloc(sizeof(char) * 10);

    m = (char *)malloc(sizeof(char) * 10);

    printf("請輸入一個數;\n");

    scanf("%s",s);

    printf("請選擇需要輸出的結果:\n");

    printf("0.退出\n1.迴文數\n2.素數\n3.親密數\n4.水仙花數\n");

    scanf("%d",&n);

    num = atoi(s);//將字符串變爲整型數

    printf("%s以內的",s);

    switch (n)

    {

    case 0: {printf("退出程序....\n"); return 0; }

    case 1:{printf("迴文數:\n");

            for (i = 1; i <= num; i++)

          {

             m = itoa(i, m, 10);//將整型數變爲字符串

              len = strlen(m);

            a = huiwen(m, len);

            if (a == 0)

             printf("");

            else

            printf("%d ",i);

 

          }

    }break;

    case 2:

       {

           printf("素數:\n");

          for (i = 2; i <= num; i++)

             {

                b = sushu(i);

                 if (b == 0)

                printf("");

              else

           printf("%d ",i);

 

             }

    }break;

    case 3: {printf("親密數:\n");

    for (i = 1; i <= num; i++)

         {

        for (j = i+1; j <=num; j++)

          {

            c = qinmishu(i, j);

            if (c == 0)

                printf("");

            else

                printf("(%d %d)", i, j);

           }

 

         }

 

    }break;

case 4: {printf("水仙花數:\n");

    for (i = 100; i <= 999; i++)

    {

        d = shuixianhua(i);

        if (d == 0)

            printf("");

        else

            printf("%d ",i);

    }

 

    }

        break;

    }

   

   

    return 0;

}

發佈了35 篇原創文章 · 獲贊 72 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章