1~n之间的回文数,素数,亲密数,水仙花数特殊数据的提取

来源:互联网 发布:解压软件安卓版 编辑:程序博客网 时间:2024/06/05 06:00

 用四个子函数来判断一个数是不是 满足回文数 素数 亲密数 水仙花数。

  其中判断回文数,先把输入的字符串数字入栈,将栈与原字符串用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(charm[],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(intx)//判断X是不是素数

{

    int i;

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

    {

        if (x%i== 0)

            return 0;

    }

 

    return 1;

 

}

int qinmishu(intx, 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(intx)//判断是不是水仙花数

{

    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;

}

原创粉丝点击